前端安全防范
1.XSS
1.1 什么是XSS
xss就是攻击者想尽一切办法将代码注入到网页中。
1.2 类型?
XSS 可以分为多种类型,但是总体上我认为分为两类:持久型和非持久型。
持久型:
攻击的代码被服务器写入数据库中,这种攻击危害性很大,网站访问量很大的情况导致大量访问正常页面的用户都受到攻击。
比如在评论功能里输入:<script>alert(1)</script>
,这段评论就会被存储到数据库中,这样每个打开该页面的用户都会被攻击到。
非持久型:
非持久型危害没有持久型危害大,一般通过修改url参数的方式加入攻击代码,诱导用户访问连接从而进行攻击。
比如如果页面需要从 URL 中获取某些参数作为内容的话,不经过过滤就会导致攻击代码被执行。
1 | <!-- http://www.domain.com?name=<script>alert(1)</script> --> |
对于这种方式,使用chrome会自动帮助用户防御攻击。
1.3防御对策
对于xss攻击,可通过转义字符和CSP2种方式进行防御
1.转义字符
转义输入输出的内容,对于引号、尖括号、斜杠进行转义
但是对于富文本,这样会把需要的格式也过滤掉。
对于这种情况,通常采用白名单过滤的办法,就是把这段代码解析成具体的html树, 对树进行分析哪些可以保留, 最后变成html字符串
1 | const xss = require('xss'); |
2.CSP
CSP本质上就是建立白名单,开发者告诉浏览器哪些资源可以加载和执行。我们只需要配置规则,如何拦截是由浏览器实现的。
可通过2种方式开启CSP:
设置http种header中的:Content-Security-Policy
设置meta标签的方法<meta http-equiv="Content-Security-Policy" />
设置http header:
1 | // 只允许加载本站资源: |
2.CSRF
2.1 什么是CSRF?
CSRF跨站请求伪造,是一种挟制用户在已登录web应用程序上执行非本意操作的攻击方法。
Cookie 往往用来存储用户的身份信息,恶意网站可以设法伪造带有正确 Cookie 的 HTTP 请求,这就是 CSRF 攻击。
浏览器在访问服务器的时候会带上cookie,而第三方网站通过图片或表单提交方式也带上cookie,带上后利用用户身份进行攻击,而用户不知情。<img src="http://www.domain.com/xxx?comment='attack'"/>
2.2 如何防御?
1.get请求不修改数据
2.不让第三方网站访问到cookie,可以对 Cookie 设置 SameSite 属性。该属性表示 Cookie 不随着跨域请求发送,可以很大程度减少 CSRF 的攻击,但是该属性目前并不是所有浏览器都兼容
3.请求时附带验证信息,比如验证码或者token
4.检查Referer字段,http请求头中referer字段表明请求来源于哪个地址,通常来说,Referer字段应和请求的地址位于同一域名下
3. DDOS
3.1 什么是DDOS?
短时间内发起大量请求,耗尽服务器资源,导致无法响应正常的访问,造成网站下线。
DDOS 里面的 DOS 是 denial of service(停止服务)的缩写,表示这种攻击的目的,就是使得服务中断。最前面的那个 D 是 distributed (分布式),表示攻击不是来自一个地方,而是来自四面八方,因此更难防
DDOS 不是一种攻击,而是一大类攻击的总称
比较常见的一种攻击是 cc 攻击。它就是简单粗暴地送来大量正常的请求,超出服务器的最大承受量,导致宕机
4.SQL注入
SQL注入是一种代码注入的技术,攻击者可以将恶意SQL语句插入到输入字段中执行。
5.加密传输
加密主要有两种方式:对称加密和非对称加密。
- 对称加密:在加密和解密时使用的是同一个秘钥。
对称加密的模式是:
甲方选择某一种加密规则,对信息进行加密
乙方使用同一种规则,对信息进行解密
2.非对称加密:需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
非对称加密的模式则是:
乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的
甲方获取乙方的公钥,然后用它对信息加密
乙方得到加密后的信息,用私钥解密。
最经典的非对称加密算法是RSA算法。