所以我知道有很多关于CSRF的问题(因为我已经读过其中的一些),但有一点我还是不明白。让我们假设以下情况:
我在我的服务器上登录(带有cookie),其中有一个页面上有一个“删除我的帐户”按钮。我不想按。
我访问黑客的服务器:
一个。我的浏览器请求'bad.html',它包含JS,并定义了回调函数。它还有一个脚本:(因此避免了同源策略问题)
var s = document.createElement('script');
s.src = 'url to "deleteAccountPage" of my server?'
s.src += 'callback=hackerCallback';
s.type = 'text/javascript';
document.body.appendChild(s);
湾脚本被“追加”浏览器将加载页面然后调用hackerCallback传递页面HTML文本作为参数。
℃。使用此HTML,回调可以在那里解析令牌。
hackerCallback现在有令牌,在“deleteMyAccount”页面上向我的服务器发送Ajax请求。
我的帐户现已删除,因为令牌,Cookie甚至浏览器跟踪都与服务器注册的匹配。
你如何避免这种行为?我已阅读过只允许在我的服务器上使用某些标题的内容。这会缩短我服务器上的所有跨域请求,但是根据这个链接(http://blog.alexmaccaw.com/jswebapps-csrf)这还不够......(我完全相信)
Thansk寻求帮助 西巴-1511
答案 0 :(得分:0)
您正在使用JSONP通过scr标记发出跨域请求。 JSONP仅允许GET请求,您不应该有GET端点进行更改(不是幂等)。
deleteAccount应该是无法通过JSONP请求的POST端点。
如果你坚持在deleteAccount上使用GET,你应该使用CSRF令牌或者在标题而不是cookie中发送令牌(如果你正在使用XHR请求)