简单地说,我想跟踪$ _POST的url请求路径。如果你在http://example.com/myscript.php中有一个脚本,我想只接受来自http://example.com/myfrom.html的请求,因为如果我从我的电脑上写一个表格并将链接放在从网站到该网站(),他接受要求。 我只是不想接受来自其他服务器的请求。怎么可能?
答案 0 :(得分:1)
不是尝试跟踪请求源,而是通常通过生成表单的随机值并将其存储在隐藏的输入字段中来处理。当您收到包含script.php
的表单时,您会验证表单提交的随机值是否与$_SESSION
中存储的随机值相匹配。这可确保访问用户必须首先加载表单。
您的表单目前是.html,但您需要将其设为PHP脚本
// Create a random token in $_SESSION
session_start();
$_SESSION['token'] = md5(time() . rand());
<input type='hidden' value='<?php echo $_SESSION['token']; ?>' name='token' />
// Verify a valid token was submitted
session_start();
if ($_POST['token'] !== $_SESSION['token']) {
// invalid post
}
答案 1 :(得分:0)
您可以查看$_SERVER['HTTP_REFERER'];
,但这可以伪造。
你想做什么听起来像是在阻止CSRF。为了做到这一点,你在myform.html中包含一个唯一生成的密钥作为隐藏字段(然后必须是myform.php)并检查myscript.php是否是正确的密钥。因此,您可以确定表单是否已提交请求。
答案 2 :(得分:0)
如果您想阻止一些临时用户从其他人的网站发布到您的网站,您可以检查$_SERVER['HTTP_REFERER']
。浏览器会发送“referer”以及大多数请求,这些请求在很多情况下是用户点击到达那里的页面。但这绝对不是万无一失的 - 浏览器(或机器人)可以随意捏造它,而某些浏览器(或这些浏览器的插件)会故意这样做。这些浏览器的用户通常在隐私方面非常重要,而且你并不那么特别。他们可能更愿意去其他地方而不是为你禁用他们的隐私资料。
您可能需要设置会话变量才能发布,但这也很容易解决。 <img src="http://your.site/yourForm.php" width="1" height="1">
足以获得会话变量集。
隐藏的表单字段听起来很糟糕,但我可以编写一个脚本来获取表单,抓取隐藏的字段,然后将其插入到我的表单中。它只与一个会话变量结合使用,该会话变量说明期望的ID ...如果人们以某种方式使用“后退”按钮,则会变得非常古怪。如果我代理请求它也会失败(即:用户与我的服务器通话,向您请求表单(并获取会话ID),然后当用户发布到我的网站时,我会使用您发送给我的会话ID和隐藏值)。关于唯一的方法是HTTPS,如果用户希望表单来自我而不是你,那就没用了。
基本上,没有办法将上述内容加上一个不错的CAPTCHA,以及阻止其他网站发布到您的表单。即使这有其弱点。你能做的最好的事情就是让它变得痛苦......而且这对你的一些用户来说也是一种痛苦。您最好的办法是确保接受帖子的脚本验证其内容,而不关心请求的来源。