Skip to main content

安全防范知识点

XSS 攻击

将可以执行的JS脚本插入到网页中。本质就是攻击者希望用户的浏览器执行他的JS代码。

反射型

  • 将一段可以执行的JS脚本作为URL的参数,用户点击这个链接(?name=<script></script>
  • 发送请求到服务器
  • 服务器没有对参数的值做转译/过滤直接拿来插入到返回的网页中
  • 用户的浏览器渲染该网页,中招!

存储型

与反射型的区别就是会将脚本存储到数据库中,下一次查询的时候取出插入到网页中返回给浏览器,浏览器渲染页面,中招!

防范

对特殊字符进行转译

Angular、React对于模版中渲染的变量都会进行转译

CSP

Content-Security-Policy

内容安全策略,就像是一个白名单,告诉浏览器可以加载并执行哪些资源。怎么拦截由浏览器自己实现。

  • HTTP 首部
  • Meta 标签

给Cookie设置HttpOnly属性,这个是防止XSS攻击获取用户Cookie的常用手段,表示不能通过document.cookie来获取和设置cookie

CSRF

跨站请求伪造

攻击者利用用户已经登陆的身份进行一些非法操作

前提:

  1. 用户登陆受信任的网站A,并且生成Cookie

  2. 在不登出A的情况下(也就是说Cookie有效的情况下)访问危险网站B,B网站请求A网站一个接口(比如说转账)

  3. A网站没有进行任何的CSRF防御

防御

给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 从而实现中间人攻击。