大家下午好,我读了很多关于 csrf 的文章,建议使用令牌来防止这种攻击: https ://learn.javascript.ru/csrf ,维基百科等。
但是什么是保护呢?如果用户登录到复杂的系统,比如网上银行,CSRF 的本质就在登录的复杂系统中。是什么阻止您获得正确形式的网上银行,从中提取必要的反 CSRF 令牌?
代码示例:
<form action="http://localhost/csrf/" method="GET">
New password:<br />
<input type="password" AUTOCOMPLETE="off" name="password_new"><br />
Confirm new password:<br />
<input type="password" AUTOCOMPLETE="off" name="password_conf"><br />
<br />
<input type="submit" value="Change" name="Change">
<input type="hidden" name='user_token' value='' />
</form>
<div id="token" style="display:none"><div>
<script type="text/javascript">
xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET", "http://bank.com/", false);
xmlhttp.send();
var token = document.getElementById("token");
token.innerHTML = xmlhttp.responseText;
tokens = document.getElementsByName('user_token');
tokens[0].value = tokens[1].value;
</script>
那么什么是通证保护呢?
你还知道哪些保护方法?
您将无法通过 Javascript 发出此类请求,因为 浏览器禁止通过 Ajax 访问第三方资源。
跨域请求经过特殊的安全控制,目的是为了防止邪恶的黑客征服互联网。
该标准的制定者提供了所有障碍,使“黑客”无法执行此类操作。
有关域限制规则(源策略)的更多信息