Cookies 解释了CSRF、令牌和同源策略
所以我知道有很多关于CSRF的问题(因为我读过其中一些),但有一点我仍然不明白。让我们设想以下情况:Cookies 解释了CSRF、令牌和同源策略,cookies,token,csrf,same-origin-policy,Cookies,Token,Csrf,Same Origin Policy,所以我知道有很多关于CSRF的问题(因为我读过其中一些),但有一点我仍然不明白。让我们设想以下情况: 我(使用cookies)登录到我的服务器,其中有一个带有“删除我的帐户”按钮的页面。我不想逼你 我访问黑客的服务器: a。我的浏览器请求'bad.html',其中包含JS,并定义了一个回调函数。它还有如下脚本:(从而避免了同源策略问题) b。脚本“附加”后,浏览器将加载页面,然后调用hackerCallback,并将页面HTML文本作为参数传递 c。使用此HTML,回调可以解析其中的令牌 hac
Seba-1511您正在使用JSONP,以便通过scr标记发出跨域请求。JSONP只允许用于GET请求,并且不应该让GET端点进行更改(而不是幂等) deleteAccount应该是无法通过JSONP请求的POST端点
如果您坚持使用GET-on-deleteAccount,您应该使用CSRF令牌或将令牌发送到标头中,而不是发送cookie(如果您使用的是XHR请求)您知道这一点吗?你能再解释一下callback=hackerCallback吗?您希望删除页面如何处理“回调”查询字符串参数?当然,删除页面不应该只执行通过uri传入的任何javascript。不,我还没有弄明白这一点。callback=hackerCallback指定响应返回给用户后将调用的函数。(它将由浏览器而不是服务器执行)这允许黑客解析从原始服务器返回的页面,从而获得正确的令牌以绕过CSRF安全机制。您能否提供域的示例?e、 g.
s.src=”http://www.example.com/deleteAccountPage.html?“
http://www.evil.com/bad.html
看起来像是hackerCallback
是evil.com
上的JS函数,对吗?谢谢你的评论。JSONP用于获取令牌,而不是删除帐户。因此,我们希望执行GET请求。删除操作可以在步骤3中使用跨域POST请求完成。您可以在案例中添加类似JSFIDLE的内容。
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);