【问题标题】:Can we ever determine if the request was sent from another domain?我们能否确定请求是否来自另一个域?
【发布时间】:2011-06-03 03:50:13
【问题描述】:

我已阅读以下网页:
PHP Form Security With Refererhttp://www.mustap.com/phpzone_post_62_how-to-bypass-the-referer-se

所以基本上我的问题是我们如何确定请求是从我们自己的域发送的?还是根本没有办法?

(针对任何服务器端语言的问题,包括但不限于 PHP/JSP/ASP.Net 等)

我的问题:我在http://me.com/login 有一个页面,在提交表单时,它会向自己发布登录详细信息。到现在为止还挺好。直到其他人可以简单地做到这一点

  <form action="http://me.com/login">
  <input name="password" value="p">
  <input name="username" value="u">
  </form>

他们可以通过他们的域发送登录到我的应用程序的请求。我不想要这个。我需要一种方法来确保如果我的页面收到一个帖子,它来自我的域。否则我会拒绝它。

此外,当我读到这篇文章时,我有点震惊:There are plugins for Firefox that allow the user to specify whatever value they want to be supplied as the REFERER. 来源:http://www.phpbuilder.com/board/showthread.php?t=10324100

所以我们现在甚至不需要黑客来破解它。几乎任何人都可以做到。

我需要一个解决方案来确保我拒绝所有不是来自我的域的请求。

【问题讨论】:

  • 您要解决的实际问题是什么?
  • 使用可以在另一端检查的唯一密钥标记请求(url?)
  • @konforce 我正在尝试通过mustap.com/phpzone_post_62_how-to-bypass-the-referer-se了解我们如何解决该问题
  • @Dagon 这个问题的重点是避免这样做..
  • 正如之前指出的那样,由于 http 协议的无状态特性 - 你不能。

标签: php asp.net web-services jsp


【解决方案1】:

所以基本上我的问题是我们如何确定请求是从我们自己的域发送的?还是根本没有办法?

你在问不可能的事。无法确定您域中页面上的提交按钮是否生成了请求。

你说这不是 CSRF,所以我不知道你为什么担心。但是解决方法是一样的。

  1. 无论如何都要检查HTTP_REFERER 标头。如果它不是您的域,则拒绝该请求。您可能需要接受缺少的标头,因为有些人禁用它。但是,这并不能阻止那些弄乱浏览器设置的人欺骗价值。但它确实可以防止被诱骗从其他网站提交表单的人(假设他们没有禁用HTTP_REFERER)。

  2. 使用仅对一个请求有效的“nonce”或临时令牌。因此,提交请求的人必须在每个请求中至少访问一次您的网站。这与确保请求来自您的网站基本相同。您还可以将 nonce 绑定到 IP 地址或会话,以防止人们查询您的站点并将令牌依赖于另一台计算机。

【讨论】:

  • 这与 CSRF 无关,因为我不担心有人试图欺骗他人(系统是安全的,即使你这样做了,你也不会取得任何成果)。但我试图阻止人们在未经我允许的情况下构建他们自己的 UI 以及通过他们的域与我的页面交互的东西。
  • @Pacerier,你所要求的是不可能的。没有办法仅仅因为无法知道他们在使用什么而强制一个人使​​用哪个客户端(特定浏览器、自定义程序等)。但是,如果有人从代理网站“抓取”您的网站,那么您可以简单地阻止该网站的 IP 地址。
【解决方案2】:

无法确定请求的来源。这就是 HTTP 无状态协议的本质。

一般ReferrerHTTP头是作为请求的来源,但是很容易被操纵。

【讨论】:

  • @Pacerier:很容易做到。放置一个包含加密字符串的hidden 表单变量。将一些会更改的内容(即时间戳或 GUID)放入其中,以便单个域的字符串每次都不同。
【解决方案3】:

使用保存在服务器上的带有加密密钥的隐藏输入,并使其经常更改(我在更改前给出 30 秒!)。这不会阻止它,但会将风险降至最低,此外,记录每个 IP 的失败尝试并在第 4 次失败尝试后阻止该 IP/用户,直到通过电子邮件重新验证。 如果尝试失败的用户名在第 4 次后与数据库不匹配,则阻止 IP 并提供电子邮件联系。

【讨论】:

    最近更新 更多