Web 安全入门之常见攻击

1.XSS攻击

XSS(Cross Site Script,跨站脚本攻击): 为什么叫 XSS,缩写明显是 CSS 啊?没错,为了防止与我们熟悉的 CSS(Cascading Style Sheets)混淆,所以干脆更名为 XSS
XSS 就是攻击者在 Web 页面中插入恶意脚本,当用户浏览页面时,促使脚本执行,从而达到攻击目的。XSS 的特点就是想尽一切办法在目标网站上执行第三方脚本。

XSS 主要有三种类型

1.存储型 XSS: 注入的脚本永久的存在于目标服务器上,每当受害者向服务器请求此数据时就会重新唤醒攻击脚本
2.反射型 XSS: 当用受害者被引诱点击一个恶意链接,提交一个伪造的表单,恶意代码便会和正常返回数据一起作为响应发送到受害者的浏览器,从而骗过了浏览器,使之误以为恶意脚本来自于可信的服务器,以至于让恶意脚本得以执行
3.DOM 型 XSS: 有点类似于存储型 XSS,但存储型 XSS 是将恶意脚本作为数据存储在服务器中,每个调用数据的用户都会受到攻击。但 DOM 型 XSS 则是一个本地的行为,更多是本地更新 DOM 时导致了恶意脚本执行

如何防御 XSS 攻击

1.从客户端和服务器端双重验证所有的输入数据,这一般能阻挡大部分注入的脚本
2.对所有的数据进行适当的编码
3.设置 HTTP Header: "X-XSS-Protection: 1"

2.SQL注入

所谓SQL注入(SQL Injection),就是通过客户端的输入把 SQL 命令注入到一个应用的数据库中,从而得以执行恶意 SQL 语句。

sql注入得以施行的因素

网页应用使用 SQL 来控制数据库
用户传入的数据直接被写入数据库

预防措施

参数化的查询语句
使用语言自带的存储程序,而不是自己直接操纵数据库
验证用户的输入
对用户提供的所有的输入都进行编码

3.DDoS

DDoS(Distributed Denial of Service),分布式拒绝服务,通过大量恶意流量占用带宽和计算资源以达到瘫痪对方网络的目的。

DDoS 攻击有两个目的

敲诈勒索,逼你花钱买平安
打击竞争对手

4.CSRF

Cross Site Request Forgery (CSRF, 跨站请求伪造),CSRF 就是网站 A 对用户建立信任关系后,在网站 B 上利用这种信任关系,跨站点向网站 A 发起一些伪造的用户操作请求,以达到攻击的目的。

怎么预防 CSRF 攻击

检查标准头部,确认请求是否同源: 检查 source origin 和 target origin,然后比较两个值是否匹配
检查CSRF Token: 1.在表单里隐藏一个随机变化的token;2.使用自定义请求头部,这个方式依赖于同源策略。其中最适合的自定义头部便是: "X-Requested-With: XMLHttpRequest"