1

我正在处理从一个域到另一个域的表单 POSTING 值(例如:www.something1.comto www.something2.com)。

如何验证请求是从哪里发布的www.something1.com?或者别的地方。

  • 是否可以获取传入的请求 URL?
  • 有没有其他验证方式?
4

3 回答 3

3

检查 的值$_SERVER['HTTP_REFERER']。一些浏览器可能会隐藏或欺骗此标头,但大多数浏览器会正确发送。

但是请记住,没有办法保证正确的推荐,很容易伪造。

于 2013-02-13T07:06:48.230 回答
3

以答案形式发表我的评论,因为我不相信任何当前的答案都可以解决您的主要问题。您想要验证表单在提交到另一个域时出现的源域。

简短的回答是No,您无法验证它(至少出于安全原因)。$_SERVER['HTTP_REFERER']但是,根据PHP 手册,可以为您提供第一个域的可用选项是:

将用户代理引向当前页面的页面地址(如果有)。这是由用户代理设置的。不是所有的用户代理都会设置这个,有些提供修改 HTTP_REFERER 作为一个特性的能力。简而言之,它不能真正被信任。

问题在于表单是由客户端提交的,并且发送到“server2”的所有数据都可以/将被恶意用户修改,以绕过您可能拥有的任何安全/验证。唯一的其他选择是放置一些需要与表单一起提交的验证,但使其接近有效的唯一方法是更改​​它,并经常更改它。(即,也许每分钟?)。但无论您添加什么,都需要提交 - 恶意用户可以完全控制发送的所有内容。

于 2013-02-13T08:56:11.120 回答
0

您可以将 URL 作为参数传递“http://site.com/page2.php?prevUrl=”.urlencode(“http://site.com/page1.php)

希望有帮助

于 2013-02-13T07:19:35.397 回答