0

假设我想限制发布请求以仅处理来自我自己域的请求,除了使用 $_SERVER['HTTP_REFERER'] 之外,我如何检查引用者,我读过($_SERVER 文档)可以不被信任?

4

3 回答 3

2

不幸的是,这是不可能的,检查引用者的唯一方法是浏览器是否提供了此信息,显然,可以更改这些信息以使读者受益。

但是,您可以创建一个用户会话或 cookie 来保存变量以显示用户访问过该站点。然后,如果定义了该会话变量,则您只能允许用户查看帖子。

另一种选择是根据用户 IP 地址生成链接,并且只有在他们单击了专门生成的链接时才授予他们访问权限。您可以首先在数据库中保存用户 IP 地址和唯一键,然后您的所有内部链接都可以使用具有唯一 ID 的 GET 变量。如果页面在没有真实 ID 的情况下打开,则您可能会显示错误消息。

于 2012-04-18T15:04:36.273 回答
1

如果它来自您自己的域,您可以设置 cookie 或使用会话变量将用户标记为在您的网站上。然后,如果发送了提交并且用户缺少该验证值,您知道您可以拒绝它(或者如果它存在则接受它)。

于 2012-04-18T15:06:03.920 回答
1

除了Cameron 的回答
您还可以使用相同的机制来防止跨站点请求伪造。即不仅设置一个会话变量来指示用户访问过您的站点,而且还向表单添加一个键,该键必须与会话数据中的值匹配。一些框架为此提供支持,例如Zend_Form_Element_Hash

于 2012-04-18T15:13:59.213 回答