我正在处理从一个域到另一个域的表单 POSTING 值(例如:www.something1.com
to www.something2.com
)。
如何验证请求是从哪里发布的www.something1.com
?或者别的地方。
- 是否可以获取传入的请求 URL?
- 有没有其他验证方式?
检查 的值$_SERVER['HTTP_REFERER']
。一些浏览器可能会隐藏或欺骗此标头,但大多数浏览器会正确发送。
但是请记住,没有办法保证正确的推荐,很容易伪造。
以答案形式发表我的评论,因为我不相信任何当前的答案都可以解决您的主要问题。您想要验证表单在提交到另一个域时出现的源域。
简短的回答是No,您无法验证它(至少出于安全原因)。$_SERVER['HTTP_REFERER']
但是,根据PHP 手册,可以为您提供第一个域的可用选项是:
将用户代理引向当前页面的页面地址(如果有)。这是由用户代理设置的。不是所有的用户代理都会设置这个,有些提供修改 HTTP_REFERER 作为一个特性的能力。简而言之,它不能真正被信任。
问题在于表单是由客户端提交的,并且发送到“server2”的所有数据都可以/将被恶意用户修改,以绕过您可能拥有的任何安全/验证。唯一的其他选择是放置一些需要与表单一起提交的验证,但使其接近有效的唯一方法是更改它,并经常更改它。(即,也许每分钟?)。但无论您添加什么,都需要提交 - 恶意用户可以完全控制发送的所有内容。
您可以将 URL 作为参数传递“http://site.com/page2.php?prevUrl=”.urlencode(“http://site.com/page1.php ” )。
希望有帮助