我想在页面中实现一个方法,我想知道POST请求的来源

时间:2012-02-18 11:37:25

标签: php post form-submit html-post

我想实现一个系统,我想知道POST请求的来源。

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

这是现在的代码:

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

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

5 个答案:

答案 0 :(得分:3)

首先,没有可靠的方法 - 用户可以根据需要篡改请求。

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

  1. 引用者,可通过$_SERVER['HTTP_REFERER']获得:它包含请求来自的完整URL,但有些人使用扩展/防火墙/等。阻止甚至恶搞参考者
  2. 正如您所建议的那样,隐藏的表单元素。除非用户主动想要篡改发送的数据,否则这总是有效。所以这是首选方式。

答案 1 :(得分:1)

$_SERVER['HTTP_REFERER']会告诉您请求的来源。

更多信息:

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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