常见 Web 攻击技术

Posted by violetks on February 23, 2020

零、Web 安全问题发展形势

不同的时代,Web 安全问题也不同,在 Web1.0 主要危害 Web 服务器,Web2.0 开始针对上网的 Web 用户。

81PZFA.png

Web 安全问题分为客户端安全问题和服务器安全问题。

81PBmF.png

百度搜索 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 语句。