一、XSS 攻击
XSS (Cross Site Script),跨站脚本攻击,因为缩写和 CSS (Cascading Style Sheets) 重叠,所以叫 XSS  
非持久型 XSS(反射型 XSS )
什么是非持久型 XSS 攻击?
非持久型 XSS 攻击,一般是 URL 参数上带有恶意脚本代码,当用户点击该 URL 时,恶意代码参数被脚本解析、执行
XSS 攻击代码演示
如下代码:1
2
3
4
5<script>
    const searchParams = new URLSearchParams(location.search)
    const queryVal = searchParams.get('query') // 获取 url query 参数值
    eval(queryVal)
</script>
当用户访问 http://xxx.com/xx?query=alert('xss') 时,query 参数值 alert('xss') 就会被浏览器解析并执行,这就是所谓的 XSS 攻击  
预防非持久型 XSS 攻击
Web页面渲染的数据源尽量来自服务器端- 尽量不要使用可执行字符串的方法,如: 
eval()、new Function()、document.write()、window.setInterval()、window.setTimeout()、innerHTML、document.createElement() - 如果上述方法无法避免,有关 
dom渲染的方法传入的字符串参数做escape转义处理 - 前端渲染的时候对任何的字段都需要做 
escape转义处理 
持久型 XSS(存储型 XSS)
什么是持久型 XSS 攻击?
持久型 XSS 攻击,一般存在于 form 表单提交功能,如评论、留言等更改服务器端资源功能的地方。将带有恶意脚本代码提交到服务器并长期存储。当前端页面渲染获取到的后端数据时,恶意脚本代码恰好被解析、执行。  
预防持久型 XSS 攻击
- 后端在入库前应该将所有的字段统一进行转义处理
 - 后端在输出给前端数据统一进行转义处理
 - 前端在渲染 
DOM之前,应该将所有字符做转义处理 
这里持久型攻击,跟非持久型攻击很类似,都是利用编写代码时的缺陷,解析并执行了本不该执行的带有恶意脚本代码。只不过持久型 XSS 攻击将恶意代码片段存储在了服务器上。
二、CSRF 攻击
CSRF(Cross Site Request Forgery),是跨站点请求伪造攻击,它利用用户登录的身份信息(如:cookie),以用户的身份完成非法操作  
CSRF 攻击原理

CSRF 攻击代码演示
web A 网站伪代码:  
1  | const express = require('express')  | 
web B 恶意网站伪代码:  
1  | <script>  | 
完成 CSRF 攻击必须要条件:
- 用户登录了 
A网站,并在本地存储了cookie - 在用户没有退出 
A网站的情况下,即A网站cookie生效条件下,打开了B恶意网站 A网站没有做任何CSRF防御措施(如:允许了跨域请求)
预防 CSRF 攻击
- 不让第三方网站访问到用户 
cookie - 阻止第三方网站请求接口(禁止跨域请求)
 - 禁止 
GET请求对数据进行修改 
三、SQL 注入攻击
SQL 注入攻击,就是通过 form 表单输入恶意的 SQL 语句,来修改后台 SQL,服务端又解析、执行了修改后的 SQL 语句,从而达到攻击的目的  
SQL 注入攻击代码演示
后端的 SQL 语句可能是如下这样的:1
2
3
4
5
6let querySQL = `
    SELECT *
    FROM user
    WHERE username='${username}'
    AND psw='${password}'
`;
这段 SQL 目的就是根据用户输入的 username 和 password 字段值来查询具体用户。正常使用没什么问题,但是当用户输入恶意 SQL 语句时就会有问题
如:username = 'gauseen' --',password=任意字符  
1  | -- 我们预想的 SQL:  | 
1  | -- 注入攻击后的 SQL 语句为:  | 
在 SQL 中 -- 是注释的意思,所以 SQL 语句实际为:1
SELECT * FROM user WHERE username='gauseen'
这样就可以在不需要知道密码的情况下,登录任何你想登录的账户。
预防 SQL 注入攻击
- 后端代码检查输入的数据是否合法
 - 对进入数据库的特殊字符 
',",\,<,>,&,*,;等进行转义处理 - 所有的查询语句建议使用数据库提供的参数化查询接口
 
四、DDOS 攻击:
DDoS(Distributed Denial of Service),是分布式拒绝服务攻击,指攻击者利用“肉鸡”对目标网站在较短的时间内发起大量请求,大规模消耗目标网站的主机资源,使服务器超负荷,让它无法正常服务  
预防 DDOS 攻击
- 黑名单,对有嫌疑的流量限制访问,但有阻挡正常流量的风险
 DDoS清洗,对用户请求数据进行实时监控,及时发现DOS攻击等异常流量,并清洗掉这些异常流量
参考资料
