CSRS的预防措施
- 使用http的referer字段
关于referer的作用戳这里
比如要想访问http://bank.example/withdraw?account=bob&amount=1000000&for=bob
就必须先登录http://bank.example
,然后通过点击页面上的按钮来转发事件。此时动账请求就会指向以bank.example
域名开发的地址,如果黑客使用的是CSRS攻击,他只能在自己网站来实施CSRS攻击,那么他发出的请求中referer就会指向黑客自己的网站,那么服务器就会拒绝访问。服务器只需要在每个动账请求中验证referer,如果指向的是以bank.example
域名开发的地址,那么就代表是合法请求,反之,就可能是黑客的CSRS攻击,服务器拒绝该请求。
优点:该方法简单易行,网站的普通开发人员不需要担心CSRS攻击,只需要在最后给所有安全敏感的请求都加一个referer拦截器,不需要改变当前系统的任何代码和逻辑,没有风险,非常便捷。
缺点:该方法也不是万无一失的,因为有些浏览器是可以篡改refere的值,比如IE5和FF12。
- 在请求地址中添加token并验证
CSRS之所以能够跨站点请求伪造攻击,是因为黑客可以完全伪造用户的请求,该请求中的用户验证信息全部都是存于cookie中,因此黑客可以在不知道这些验证信息的情况下直接利用用户的cookie来通过安全验证。要想抵御黑客的攻击,就要将请求放于黑客不能构造的信息中,并且该信息不存于cookie中,可以在http请求中以参数的形式加入一个随机产生的token中,并在服务器中建立一个拦截器来验证该token,如果请求中没有token或者token的内容不正确,那么就拒绝访问。
token可以在用户登录之后放于session中,然后每次请求都从session中拿出,与请求中的token相比。
如果是GET请求:token会附在地址的后面。
如果是POST请求:在from 的后面加上<input type="hidden" name="csrftoken" value="tokrnvalue"/>
优点:会比refere安全
缺点:在一个网站中,请求的地方有很多,对于每一个请求都要加上token是非常麻烦的,一般会在每次页面加载的时候,使用javascript遍历整个dom树,动态生成的dom需要手动添加。还有就是难以保证token本身的安全。
- 在http头字段自定义属性添加token属性并验证
将token放于http头中的自定义属性里。
优点:可以一次性给所有类请求都加上http的头属性,并且通过XMLHttpRequest不会被记录到浏览器的地址栏,也不用担心referer被泄露出去。
缺点:Ajax局部刷新,并非所有的请求都适合用这个类来发起,而且通过该类请求得到的页面不能被浏览器所记录下,从而前进后退刷新收藏等操作,给用户带来不便。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后:
总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。
面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。
、每次遇到的难点知识,做好积累,实践和总结。