下面内容我自己整理和从网上收集的,给大家共享一下:
一、SQL注入
1、 在组合SQL语句时要使用SQL变量绑定功能
2、 如果数据库不提供变量绑定,那么需要对构成SQL的所有变量进行转义
3、不要将错误信息原封不动地显示在浏览器中。
4、为访问数据库的用户设置适当的权限。
二、操作系统命令行注入
1、 避免使用能启动shell命令的语言
2、使用的语言如果允许启动shell命令,则需要对该功能的参数种的所有变量进行检查,确保只包含合法的操作
三、不检查路径名参数/目录遍历
1、不要将外部传进来的参数直接作为文件名来使用
2、 将打开文件的操作限制在固定的目录中,并禁止文件名中包含路径
3、为Web服务器上的文件设置正确的访问权限
4、检查文件名
四、会话管理的问题
1、 用难以推测的内容作为会话ID
2、 不要在URL中保存会话ID
3、 为https协议中使用的cookie设置secure属性
4、 登录成功后生成新的会话
5、 登录成功后,在会话ID之外再生成一个秘密信息,每次访问页面时都检查之
6、不使用固定值作为会话ID
7、将会话ID保存到Cookie中时,要设置有效期限
五、跨站脚本攻击(XSS)
1、不允许输入HTML内容时的解决方法
(1)、 输出到页面上的所有内容都要转义
(2)、 输出URL时仅允许以“http://”或“https://”开头的URL
(3)、 不要动态生成<script></script>的内容
(4)、 不要从外部网站读入样式表
(5)、 检查输入内容
2、允许输入HTML内容时的解决方法
(1)、 解析输入的HTML内容,生成解析树,然后提取其中的非脚本部分
(2)、使用脚本删除输入的HTML内容中的相关字符串
3、通用解决方法
(1)、应答的HTTP头重指定Content-Type的charset属性
(2)、为避免Cookie情报泄漏,应禁止Trace方法,并对所有Cookie设置HttpOnly属性
六、跨站请求伪造(CSRF)
1、 所有页面都通过POST来访问,在前一页面的hidden中随机生成一个信息,提交后的页面检查该信息,正确时才予以执行
2、 执行业务之前再次要求输入密码
3、 确认Referer是否正确,只有正确时才执行
4、 执行重要操作时,向预先设置的邮件地址中发送邮件
七、HTTP头注射
1、 不直接输出HTTP头,而使用运行环境提供的头信息输出API
2、 无法使用API时,要禁止输入的头信息中的换行
3、 删除所有外部输入中的换行
八、邮件盗用(通过某种手段使邮件发送到攻击者指定的地址)
1、不使用外部参数作为邮件头信息
2、必须用外部参数设置头信息时,要删除其中的危险字符。