零、Web 安全问题发展形势
不同的时代,Web 安全问题也不同,在 Web1.0 主要危害 Web 服务器,Web2.0 开始针对上网的 Web 用户。
Web 安全问题分为客户端安全问题和服务器安全问题。
百度搜索 Hacked by,可以看到许多被黑客攻击了的网站。
一、XSS
跨站脚本攻击(Cross Site Script),攻击者通过“HTML注入”篡改网页,插入了恶意脚本,当用户在浏览网页时,实现控制用户浏览器行为的一种攻击方式。
XSS 分类:
- 存储型:XSS 脚本内容存储到数据库中,被改的是数据库内容。
- 反射型:用户访问携带 XSS 脚本的链接时触发,被改的是访问 URL 的请求参数。
- DOM 型:用户的网页脚本在修改本地页面 DOM 环境时未进行合理的处置,而使得攻击脚本被执行。
XSS 类型 | 存储型 | 反射型 | DOM 型 |
---|---|---|---|
触发过程 | 1.黑客构造 XSS 脚本;2.正常用户访问携带 XSS 脚本的页面 | 访问携带 XSS 脚本的 URL | 访问携带 XSS 脚本的 URL |
数据存储 | 数据库 | URL | URL |
谁来输出 | 后端 Web 应用程序 | 后端 Web 应用程序 | 前端 JavaScript |
输出位置 | HTTP 响应中 | HTTP 响应中 | 动态构造的 DOM 节点 |
攻击方式:盗用 cookie,假冒合法用户与网站进行交互。
防御方法:
1、不信任用户提交的任何内容,并过滤掉输入中的所有特殊字符。对所有用户提交内容进行可靠的输入验证,包括对 URL、查询关键字、HTTP 头、REFER、POST 数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。尽量采用 POST 而非 GET 提交表单;对“<”,“>”,“;”,“””等字符做过滤;任何内容输出到页面之前都必须加以 en-code,避免不小心把 htmltag 显示出来。
2、实现 Session 标记(session tokens)、CAPTCHA(验证码)系统或者 HTTP 引用头检查,以防功能被第三方网站所执行,对于用户提交信息的中的 img 等 link,检查是否有重定向回本站、不是真的图片等可疑操作。
3、cookie 防盗。避免直接在 cookie 中泄露用户隐私,例如 email、密码,等等;通过使 cookie 和系统 IP 绑定来降低 cookie 泄露后的危险。这样攻击者得到的 cookie 没有实际价值,很难拿来直接进行重放攻击。
4、确认接收的内容被妥善地规范化,仅包含最小的、安全的 Tag(没有 JavaScript),去掉任何对远程内容的引用(尤其是样式表和 JavaScript),使用 HttpOnly 的 cookie。
二、CSRF
跨站请求伪造,是一种挟制用户在当前已登录的 Web 应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。例如:打开网页自动转账。
防御方法:
1、检查 Referer 字段: HTTP 头中有一个Referer
字段,这个字段用以标明请求来源于哪个地址。
2、添加校验 token
三、点击劫持
点击劫持,也被称为 UI 覆盖攻击。利用<iframe>
标签的透明属性,将恶意网页设置为透明覆盖在正常网页上。
通过覆盖不可见的框架误导受害者点击而造成的攻击行为。
防御方法:
JavaScript 中禁止内嵌。
因为普通页面的 top 对象为 window,而 iframe 的 top 对象不等于 window 对象,可以在 JS 代码中:
if (top.location !== window.location) {
top.location = window.location;
}
四、URL 跳转漏洞
借助未验证的 URL 跳转,将应用程序引导到不安全的第三方区域,从而导致的安全问题。
五、SQL 注入漏洞
所谓 SQL 注入,就是通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行指定的 SQL 语句。具体来说,它是利用现有应用程序,将 SQL 语句注入到后台数据库引擎执行的能力,它可以通过在 Web 表单中输入 SQL 语句得到一个存在安全漏洞的网站上的数据,而不是按照设计者意图去执行 SQL 语句。