vlambda博客
学习文章列表

面试题锦(7) | 说说XSS 和 CSRF 攻击

前言

「面试题锦」的初衷是为了记录我的前端学习轨迹,在整理记录的过程中对我而言也是一种成长,欢迎你合我一起每周重点攻克一个前端面试重难点。在进阶的路上,一起来叭!

1. 什么是CSRF攻击

CSRF即Cross-site request forgery(跨站请求伪造),是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。

假如黑客在自己的站点上放置了其他网站的外链,例如"www.weibo.com/api,默认情况下,浏览器会带着weibo.com的cookie访问这个网址,如果用户已登录过该网站且网站没有对CSRF攻击进行防御,那么服务器就会认为是用户本人在调用此接口并执行相关操作,致使账号被劫持。

2. CSRF特点

  • CSRF(通常)发生在第三方域名;

  • CSRF攻击者(通常)不能获取到Cookie等信息,只是使用;

3. 如何防御CSRF攻击

  • 验证Token:浏览器请求服务器时,服务器返回一个token,然后放在页面中,页面提交请求的时候,带上这个Token。服务端把Token从Session中拿出,与请求中的Token进行比对验证。

  • 验证Referer:通过验证请求头的Referer来验证来源站点,但请求头很容易伪造

  • 设置SameSite:设置cookie的SameSite,可以让cookie不随跨域请求发出,但浏览器兼容不一

  • 验证码:CSRF 攻击往往是在用户不知情的情况下构造了网络请求。而验证码会强制用户必须与应用进行交互,才能完成最终请求。因此验证码被认为是对抗 CSRF 攻击最简洁而有效的防御方法。但验证码并不是万能的,因为出于用户考虑,不能给网站所有的操作都加上验证码。所以验证码只能作为防御 CSRF 的一种辅助手段,而不能作为最主要的解决方案。

4. 什么是XSS攻击

XSS即Cross Site Scripting(跨站脚本攻击),指的是通过利用网页开发时留下的漏洞,注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。常见的例如在评论区植入JS代码,用户进入评论页时代码被执行,进而窃取隐私数据比如cookie、session,或者重定向到不好的网站等。

5. XSS攻击有哪些类型

  • 「存储型」:即攻击被存储在服务端,常见的是在评论区插入攻击脚本,如果脚本被储存到服务端,那么所有看见对应评论的用户都会受到攻击。

  • 「反射型」:攻击者将脚本混在URL里,服务端接收到URL将恶意代码当做参数取出并拼接在HTML里返回,浏览器解析此HTML后即执行恶意代码。例如在url上添加脚本类的参数:https://www.baidu.com?jarttoTest=<script>alert(document.cookie)</script>

  • 「DOM型」:将攻击脚本写在URL中,诱导用户点击该URL,如果URL被解析,那么攻击脚本就会被运行。和前两者的差别主要在于DOM型攻击不经过服务端

6. 如何防御XSS攻击

  • 输入检查:「不要相信用户的任何输入」,对输入内容中的<script><iframe>等标签进行转义或者过滤。

  • 输出检查:「不要完全信任服务端」,对服务端输出内容有规则的过滤后再输出到页面中。

  • 「设置httpOnly」:很多XSS攻击目标都是窃取用户cookie伪造身份认证,设置此属性可防止JS获取cookie。

  • 「开启CSP」:即开启白名单,可阻止白名单以外的资源加载和运行。

参考

https://github.com/dwqs/blog/issues/68

https://juejin.im/post/6844904116552990727

小结

如果您觉得这篇内容对您有些许作用,请长按二维码关注我哦!

  • 觉得文章还不错,可以点个「赞」和「在看」呀~欢迎「留言」和我交流~

  • 我的掘金:齐小神,「欢迎收藏」

既然已经读到这里了,就在评论区打个卡吧!您的关注是我坚持的动力~