如何知道表格的来源?

时间:2009-05-16 05:49:09

标签: php html-form

我想知道在PHP中是否有一种方法可以告诉表单的提交位置而不使用隐藏字段或其他任何类似用户只需要篡改html的内容? 例如,如果提交的表单实际上是在我的网站上,或者表单是否已脱机保存并以这种方式提交,我正在努力解决。

5 个答案:

答案 0 :(得分:3)

如果隐藏字段包含UID,则不容易欺骗(如果您加密时间戳,则可以告诉用户在页面上显示的时间长度)

当然用户可以在该字段中输入他想要的任何内容,但除非他能够生成有效的UID,否则他无法让您的PHP脚本相信它来自其他地方。

您还可以通过$ _SESSION跟踪用户访问过的页面,并使用它而不是HTTP引用者(将每个访问过的页面存储在$ _SESSION中的数组中,当您的脚本被调用时,您只需检查最后一页是否是您的?根据您的需要,可能会有变化。

答案 1 :(得分:1)

您可以尝试使用HTTP请求中设置的引荐标头,请注意并非所有浏览器都设置正确,或者用户关闭它们,或者它们很容易被欺骗。

如果没有包含唯一标识符的隐藏字段,该标识符用于标识该单个提交的表单,则无法确定表单是否伪造。

答案 2 :(得分:0)

我可能错了,但引用者标题不会告诉你这个吗?

答案 3 :(得分:0)

这可以让你了解你的目标:

$referer = ($SERVER["HTTP REFERER"] == null);

这实际上是从HTTP Header中获取它,它看起来像这样:

...
Referer: http://foobar.com/page.php
...

任何人都很容易欺骗这个,但在大多数情况下这是合理的。

琐事:Referer实际上拼写引荐来源这是正确的拼写,但拼写错误已经进入HTTP规范并且一直存在。

答案 4 :(得分:-2)

你无法说出来。为什么重要?如果你试图检测是否有人伪造了请求,你就不能。

修改:上面的绿色解决方案确实可以解决一些问题,但它没有解决是否来自您的网站,或者是否已修改过的问题。