0

我想实现一个系统,我想知道 POST 请求来自哪里。

例如:我有一个带有提交按钮的表单。当用户单击提交按钮时,它会转到页面。但我想知道发布请求的来源。

这是到目前为止的代码:

<form action="profile.php?id=<?php echo $user->id; ?>" method="post" name="formAdd"><input name="btnAddUser" type="submit" value="Add User"></form>

我应该使用隐藏的输入元素吗?这会是一个好方法还是别的什么?

4

5 回答 5

3

首先,没有可靠的方法——用户可以随意篡改请求。

除此之外,还有两种方法可以获得您想要的信息:

  1. 引用者,可通过$_SERVER['HTTP_REFERER']:它包含请求来自的完整 URL,但有些人使用扩展/防火墙/等。阻止甚至欺骗引用者
  2. 正如你所建议的,一个隐藏的表单元素。除非用户主动想要篡改发送的数据,否则这始终有效。所以这是首选方式。
于 2012-02-18T11:41:00.440 回答
1

这实际上取决于您需要它的安全性和可靠性。隐藏的表单域会起作用,尽管这意味着您需要将它添加到指向您的处理脚本的每个表单中。如果有人愿意,也很容易伪造。或者,您可以使用 $_SERVER['HTTP_REFERER']。这并不总是可靠的 - 我相信它确实取决于您使用的浏览器,但在大多数简单场景中应该足够好。另一种选择是在会话中存储一些东西并使用它。这可能是最安全的,因为它都是服务器端的并且不能被篡改,但它可能是最难实现的(不是说它是火箭科学)。

于 2012-02-18T11:42:13.967 回答
1

$_SERVER['HTTP_REFERER']它将让您知道请求的来源。

更多信息:

于 2012-02-18T11:39:48.710 回答
0

我会使用 value="name_of_referring_page" 的隐藏字段。这样,无论用户的设置、防火墙、浏览器等如何,您都可以获得所需的信息。

于 2012-03-04T02:12:02.860 回答
0

您可以将页面保存在会话变量中($_SESSION["something"] = "page.php"),我认为这是最安全的方式,因为用户可以更改表单中的隐藏输入,并且$_SERVER['HTTP_REFERER'] 并不总是可用的。

于 2012-02-18T12:09:14.000 回答