前言:
CSRF (Cross Site Request Forgery),中文称:跨站请求攻击。攻击者通过建构网站后台某个功能接口的请求地址,设法让用户点击连结或者脚本的方式让请求地址自动加载。
攻击者怎样攻击?
用户登录原网站,浏览器会记录Cookies ,如果用户未登出或Cookies并未过期(用户关闭浏览器不代表网站已登出或Cookies会立即过期)。在这期间,如果用户造访其他危险网站,点击了攻击者的连结,便会向原网站发出某个功能请求,原网站的伺服器接收后会被误会以为是用户合法操作。
为何会有漏洞?
一般是网站采用 GET 形式去发出请求,让攻击者轻易知道网站向后台的请求方式。令攻击者按照其方式,建构网站后台某个功能接口的请求地址。在你点击击攻击者的连结前,由于你已登录过原网站。而攻击者的连结会向原网站发出请求,你的浏览器会带上你原网站的 Cookie 发出 GET 形式的请求去执行请求,原网站的伺服器接收后会被误会以为是用户合法操作。
即使改用 POST 形式的接口也不是绝对安全,因为攻击者可以利用脚本去获得 POST 形式提交的参数页面。
如何预防?
在于用户,应该:
- 登录网站后,使用完毕后紧记登出。
- 登录网站期间,避免浏览其他网站或图片,表单及文字等连结点击。
- 避免浏览其他不明来历网站或点击不明来历图片,表单及文字等连结。
- 避免在浏览器储存帐户名称或密码
在于开发人员,应该:
- 从伺服器进行预防
- 在页面表单中加上CSRF token
在页面表单中加上一个<input type="hidden">
,并设定名name =csrftoken
,value=""
填的值由 伺服器随机产生,并存在伺服器的 session 中。
<input type="hidden" name="csrftoken" value="tergf1dgkjeirg"/>
按提交之后,伺服器会核对表单中的csrftoken
与自己 session 里面存的是否一致,若是则代表由使用者本人发出的请求。
- 还有其他的预防方式可参考:
让我们来谈谈 CSRF
浅谈CSRF攻击方式
总结:
本文是小弟学习前端写有关于简述:CSRF 攻击是什么?,请大家多多指教。如有任何意见及交流,可在下方留言,谢谢!