【知识点】前端安全

367 阅读4分钟

CSRF攻击(跨站请求伪造)

什么是CSRF

跨站请求伪造是指攻击者可以在第三方站点制造HTTP请求并以用户在目标站点的登录态发送到目标站点,而目标站点未校验请求来源使第三方成功伪造请求。

为什么会产生CSRF

JS控制浏览器发送请求的时候,浏览器是根据目标站点,而不是来源站点,来发送cookie的,如果当前会话中有目标站点的cookie,就发送出去。核心问题是浏览器的会话机制,是跨站请求伪造漏洞的根源。

CSRF图解

token验证

  1. 用户登录,成功后服务器返回Token给客户端。
  2. 客户端收到数据后保存在客户端
  3. 客户端再次访问服务器,将token放入headers中
  4. 服务器端采用filter过滤器校验。校验成功则返回请求数据,校验失败则返回错误码

Referer验证

根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限页面的请求必须来自于同一个网站。比如某银行的转账是通过用户访问http://bank.test/test?page=10&userID=101&money=10000页面完成,用户必须先登录bank.test,然后通过点击页面上的按钮来触发转账事件。当用户提交请求时,该转账请求的Referer值就会是转账按钮所在页面的URL(本例中,通常是以bank. test域名开头的地址)。而如果攻击者要对银行网站实施CSRF攻击,他只能在自己的网站构造请求,当用户通过攻击者的网站发送请求到银行时,该请求的Referer是指向攻击者的网站。因此,要防御CSRF攻击,银行网站只需要对于每一个转账请求验证其Referer值,如果是以bank. test开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果Referer是其他网站的话,就有可能是CSRF攻击,则拒绝该请求。

XSS攻击(跨站脚本攻击)

攻击方式

黑客在页面中嵌入javascript脚本,当用户浏览到该页面时,脚本就会执行。

危害

  1. 通过 document.cookie 盗取 cookie中的信息
  2. 使用 js或 css破坏页面正常的结构与样式
  3. 流量劫持(通过访问某段具有 window.location.href 定位到其他页面) 参考链接
  4. dos攻击:利用合理的客户端请求来占用过多的服务器资源,从而使合法用户无法得到服务器响应。并且通过携带过程的 cookie信息可以使服务端返回400开头的状态码,从而拒绝合理的请求服务。参考链接

类型

  1. 反射型:我向服务端发送了一段攻击脚本,服务端收到后又原模原样的返回给客户端,常用攻击入口搜索框,通常是没有搜索到相关内容。

  2. 存储型:通过发布带有恶意脚本的帖子或评论,从而把恶意脚本存储在服务器,每个查看该帖子/评论的页面都会触发执行恶意脚本。通常有用户输入,并且有对应输出的地方,都有可能发生XSS攻击

预防

对输入(和URL参数)进行过滤,对输出进行编码

  • 在提交表单时,前端最好将文本内容转为html实体编码,也就是过滤掉script、a、这样的标签,然后再提交到后台去。当然保险起见,后台也要再做一遍html实体转码,然后再入库。

  • 在显示文本内容时,最好也要做一次html实体编码转换后再显示,防止script标签生效

点击劫持

点击劫持是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。