安全防范知识点
XSS 攻击
将可以执行的JS脚本插入到网页中。本质就是攻击者希望用户的浏览器执行他的JS代码。
反射型
- 将一段可以执行的JS脚本作为URL的参数,用户点击这个链接(
?name=<script></script>
) - 发送请求到服务器
- 服务器没有对参数的值做转译/过滤直接拿来插入到返回的网页中
- 用户的浏览器渲染该网页,中招!
存储型
与反射型的区别就是会将脚本存储到数据库中,下一次查询的时候取出插入到网页中返回给浏览器,浏览器渲染页面,中招!
防范
对特殊字符进行转译
Angular、React对于模版中渲染的变量都会进行转译
CSP
Content-Security-Policy
内容安全策略,就像是一个白名单,告诉浏览器可以加载并执行哪些资源。怎么拦截由浏览器自己实现。
- HTTP 首部
- Meta 标签
HttpOnly Cookie
给Cookie设置HttpOnly属性,这个是防止XSS攻击获取用户Cookie的常用手段,表示不能通过document.cookie来获取和设置cookie
CSRF
跨站请求伪造
攻击者利用用户已经登陆的身份进行一些非法操作
前提:
用户登陆受信任的网站A,并且生成Cookie
在不登出A的情况下(也就是说Cookie有效的情况下)访问危险网站B,B网站请求A网站一个接口(比如说转账)
A网站没有进行任何的CSRF防御
防御
SameSite Cookie
给Cookie设置SameSite属性,禁止请求携带第三方Cookie。
Referer验证
服务器验证请求来源
验证码
Token
服务器下发一个随机 Token,每次发起请求时将 Token 携带上,服务器验证 Token 是否有效。
请求的url携带一个特殊的参数,这个参数的值可以是用户登陆成功之后服务器生成的一个值,保留在cookie中或者是session中,客户端在请求的时候需要携带这个参数,服务器收到请求之后取出参数的值进行验证,不一致的话,拒绝访问。这就要求攻击者要构造一个完整的URL,所以一定程度上可以防止CSRF攻击
点击劫持
攻击者将被攻击的网站作为一个iframe嵌套到自己的网站中,并设置为透明,在自己的网站防治一个按钮诱导用户点击按钮,其实点击的是嵌入网站上的按钮
防御
X-Frame-Options - 响应头
deny: 网站不允许作为iframe嵌入
sameorigin: 网站允许被同域名的网站作为iframe加载
allow-from: 值是一个URL,表示网站允许被指定URL的网站作为iframe嵌入
SQL注入
OS命令注入
中间人攻击
非对称加密就可以有中间人攻击 - 解决就是数字证书
中间人攻击是攻击方同时与服务端和客户端建立起了连接,并让对方认为连接是安全的,但是实际上整个通信过程都被攻击者控制了。攻击者不仅能获得双方的通信信息,还能修改通信信息。
通常来说不建议使用公共的 Wi-Fi,因为很可能就会发生中间人攻击的情况。如果你在通信的过程中涉及到了某些敏感信息,就完全暴露给攻击方了。
当然防御中间人攻击其实并不难,只需要增加一个安全通道来传输信息。HTTPS 就可以用来防御中间人攻击,但是并不是说使用了 HTTPS 就可以高枕无忧了,因为如果你没有完全关闭 HTTP 访问的话,攻击方可以通过某些方式将 HTTPS 降级为 HTTP 从而实现中间人攻击。