假设我假设我使用get_user_unfo()
来请求一些用户数据。此函数使用user_id
的会话变量,该变量在用户登录时设置,以获取与该用户相关的所有信息。
如果来自evil.com
的某人要为我的网站get_user_info
创建相同的ajax请求,会有什么结果?
a)没有任何内容可以返回,因为他们从未登录过我的网站,因此我的域名中没有设置user_id变量。如果这是真的并且没有返回结果那么为什么我应该使用随机生成的令牌而不仅仅是1
或0
或
b)他们是否能够在自己的域上创建一个名为user_id的会话变量,该变量会使我网站的请求返回信息?
答案 0 :(得分:0)
现在我很清楚,我不明白CSRF的用途是什么以及如何使用它。
要回答我过去的问题,a或b都不正确。
CSRF的工作方式最好描述为here:
跨站点请求伪造(CSRF)是一种迫使最终用户的攻击 在他们所在的Web应用程序上执行不需要的操作 目前已通过身份验证
因此,如果用户访问的evil.com
页面向mydomain.com/change-email
发出了ajax请求,那么如果没有任何保护,这将会通过,因为毫无戒心的用户将登录mydomain.com所以ajax请求将播放该用户信息。
您需要令牌的原因是表单和请求可以通信。因此,如果evil.com试图从mydomain.com的页面执行ajax请求,则值将不相同。
您不想使用1或0的原因也是出于同样的原因。攻击者可以设置提交1或0的ajax请求,并且请求可以正常工作。