我有一个网页,可以在用户访问该页面时跟踪他们。这是一个“个人资料页面”,如果有人访问您的“个人资料页面”,他的访问将被跟踪并通知您。
这类似于stackoverflow 的个人资料页面,它跟踪个人资料视图(尽管细节不同)。每当唯一身份访问者访问您的个人资料页面时,个人资料查看次数计数器都会增加。
我使用存储在浏览器 cookie 中的随机生成的令牌对用户进行身份验证。这就是我有一个很大的CSRF问题的地方,因为任何随机网站都可以简单地代表我的用户访问该网页,而他们不知道。例如,攻击者的网页可以简单地嵌入一个指向我的网页的 iframe 或图像:
<img src="http://mysite.com/profile-page">
or
<iframe src="http://mysite.com/profile-page"></iframe>
每当我的用户访问攻击者的网页时,他们会在不知情的情况下访问某人的个人资料页面(然后记录访问)。
让我用一个具体的例子来说明我的观点:
如今,许多网站都允许用户发布图片 URL。用户可以发布这样的图像:
<img src="https://stackoverflow.com/users/632951/pacerier">
image 标签的src
确实不是图像文件,但浏览器仍然会发出请求并显示一个空图像:
这意味着攻击者刚刚成功地代表用户向https://stackoverflow.com/users/632951/pacerier发出请求,很可能在用户不知情的情况下。
正如防止 CSRF 和 XSRF 攻击中提到的,我们可以添加一些隐藏的输入字段和一个显示“您确定要请求此页面吗?”的表单。缺点是每个请求页面的真正用户现在都需要单击按钮Yes, Confirm Request Page才能访问该网页,这将严重破坏可用性。我不想强迫用户点击 Confirm 每个进行跟踪的页面。
还有其他更用户友好的方法来阻止 CSRF 获取请求吗?
如果它是嵌入式页面,我们如何告诉浏览器不要从域http://mysite.com请求页面(浏览器的 url 栏没有显示请求的页面,这意味着它是嵌入式图像、框架、iframe 等) ?