1)SQL 注入
定义: 攻击方提交一段数据库查询代码, 获取他想知道的信息.
原因:
对于输入检查不充分, 将用户提交的非法数据当作命令来执行;
部分 web 应用采用 Jsp+JavaBean 或 SSH 框架, 代码中会有直接写 SQL(或 HQL) 语句, 而有些 SQL 是用拼串实现的.
预防措施
严格限定参数类型, 明确参数检验的边界, 必须在服务端执行数据验证
采用参数化查询的方法 (推荐)
内置过滤系统 (本质是黑名单, 很常见但是不推荐)
数据库加固
2) 跨站脚本漏洞 (XSS)
定义: 攻击方往 Web 页面插入 html 代码, 在用户浏览页面时会执行恶意目的, 属于被动攻击.
分类:
持久型 XSS(Persistent), 与非持久型 XSS 相反, 它是指通过提交恶意数据到服务器, 通过 Web 应用程序输出恶意数据输出到页面, 持久型 XSS 多出现在 Web 邮箱, BBS, 社区等从数据库读出数据的正常页面 (比如 BBS 的某篇帖子中可能就含有恶意代码)
非持久型 XSS(Non-persistent), 即反射型, 它是指那些浏览器每次都要在参数中提交恶意数据才能触发的跨站脚本漏洞.
预防措施
过滤: 一般需多次过滤, 例如 < scrip<script>t > 过滤掉 < script > 后还是 < script>, 且需要注意过滤次序.
输入编码: 输入编码往往可以有全局的解决方案, 从设计的角度来看, 这是最佳的.
输出编码:
输出编码有助于开发者细粒度控制输出, 但也导致了工作量的增加.
输出编码可以解决输入编码无法处理的已入库数据.
用户安全加固: 不轻信来源不明的 url 和自动登录信息.
3) 跨站请求伪造 (XSRF)
定义: 获取客户会话或 cookies, 模仿合理用户, 非法查看或变更用户记录和执行操作.
原因: 应用程序的验证方法不充分
预防措施
检查 http 头部: 只接受本域请求不接受外域
使用一次性令牌: 每次请求都带上一个服务器生成的随机数, 由服务器进行检验
使用检验图片: 图片验证很难被恶意程序识别
4) 文件上传漏洞
允许上传可执行文件
使用客户端 JS 验证上传文件类型
使用黑名单限制上传文件类型
文件名 / 存储目录名可自定义
文件名中特殊字符处理不当
预防措施
首先编码者需要对上传页面代码严格把关, 特别是在保存文件的时候, 考察可能出现的异常字符, 如../,..\, 空字符等.
其次, 对文件扩展名检查要采取 "允许 jpg,gif..." 这样的检查, 而不要采取 "不允许 asp..." 这样的检查;
最好对上传文件的目录设置不可执行, 这可以通过 Web 服务器配置加固实现.
来源: http://www.bubuko.com/infodetail-3458249.html