security - 如何阻止对我的网页的嵌入请求?

标签 security web-applications cookies csrf

我有一个网页,可以在用户访问该页面时跟踪他们。这是一个“个人资料页面”,如果有人访问您的“个人资料页面”,他的访问将被跟踪,并且您将收到通知。

这类似于 stackoverflow's profile page它跟踪个人资料 View (尽管细节有所不同)。每当有唯一身份访问者访问您的个人资料页面时,个人资料查看次数计数器就会增加。

我使用存储在浏览器 cookie 中的随机生成的 token 对用户进行身份验证。这就是我有一个大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">

图像标签的src确实不是图像文件,但浏览器仍然会发出请求并显示空图像:

enter image description here

这意味着攻击者刚刚成功向 https://stackoverflow.com/users/632951/pacerier 发出请求代表用户,很可能在用户不知情的情况下。

Preventing CSRF and XSRF Attacks 中所述,我们可以添加一些隐藏的输入字段和一个表单,其中显示“您确定要请求此页面吗?”。缺点是每个请求该页面的真实用户现在都需要单击按钮是,确认请求页面才能访问该网页,这会严重破坏可用性。 我不想强制用户点击 确认 每个进行跟踪的页面。

还有其他更用户友好的方法来阻止 CSRF get 请求吗?

我们如何告诉浏览器不要从域 http://mysite.com 请求页面如果它是嵌入页面(浏览器的网址栏未显示请求的页面,这意味着它是嵌入图像、框架、iframe 等)?

最佳答案

这是一种应该相当简单且可靠的方法:

  • 不要计算对页面发出的请求,而是计算页面上的某些内容发出的请求(例如 AJAX 请求和/或对页面上的图像)。这将解决 img 黑客攻击,因为浏览器实际上不会尝试将 HTML 页面呈现为图像,因此不会运行任何 JavaScript 或在页面上加载任何(子)图像。

  • 添加X-Frame-Options: DENY header 到页面,这样浏览器也不会在 iframe 中呈现它。对于较旧的浏览器(或者只是作为腰带方法的一部分),您还可以让 JavaScript 检查 window.parent == window在发送 AJAX 确认之前。

  • 最后,为了保护您计算的(AJAX/图像)请求免遭欺骗,请包含一个唯一的、不可预测的 token ,该 token 在每个请求中仅有效一次。一种方法是随机生成 token 并将它们保存在数据库(或 session 存储)中,直到它们被收回(或变得太旧)。

    或者,如果您不想将 token 存储在数据库中,您可以计算 MAC时间戳(例如用户的 IP 地址)并将两者与请求一起发送,从而消除任何具有错误 MAC 或过时时间戳的请求。

关于security - 如何阻止对我的网页的嵌入请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16918372/

相关文章:

java - Spring Security 3.0重定向到超时的页面

performance - 大量的调试日志会减慢我的 (grails) web 应用程序的速度吗?

java - 2 个独立的 Web 应用程序如何与 Hibernate 共享二级缓存?

json - 如何使用 Swift 从 NSURLSession 获取 cookie?

javascript - 我可以将从 javascript 设置的 cookie 值存储到 php 变量中吗?

php - 如何在 SSO 中共享 JWT key

asp.net-mvc-3 - 我应该使用HTTP引荐来源网址验证或 token 验证来防止CSRF攻击吗?

security - MD5 哈希加盐 - 在哪里存储盐

iphone - 在 iPhone 上以纵向和横向自动适应屏幕的图像?

Tomcat 7 - Firefox 工作但 IE 不工作,cookie 问题