如果访问者不是来自某个页面(在同一个域上),则阻止访问PHP页面

时间:2012-11-19 19:39:06

标签: php nginx http-referer

正如标题所说,如果访问者不是来自特定网址,我会阻止他们查看网页内容。我怎样才能做到这一点?我有PHP over Nginx。使用PHP或Nginx会更好吗?

我读到使用HTTP_REFERER并不是最好的主意,因为浏览器并不强制要求......你会做什么(代码示例)?

5 个答案:

答案 0 :(得分:3)

可能不完美,但我会在初始页面上设置$ _SESSION,然后在链接页面上检查并删除它。

$_SESSION['allow'] = 'yes';

然后在下一页

if(isset($_SESSION['allow']) && $_SESSION['allow'] == 'yes') {
    $_SESSION['allow'] = 'now viewing';
}

或类似的......

答案 1 :(得分:3)

最防弹的解决方案是传递一个_GET参数,该参数从一个页面到另一个页面猜测并不容易猜测,是一个独特的标记。

然而,它需要花费大量精力才能正确实施,因为它不是最简单的解决方案,而且到目前为止也不是最简单的解决方案。

为了复杂性,最简单的是,您的备选方案是:

  • Referer的
  • 使用固定的GET参数
  • Cookie放在第一页上的用户身上。对于不接受cookie的访问者不起作用,如果您在欧盟工作,则需要cookie政策。
  • 使用nonces作为GET参数

详细的最后一个解决方案

您的初始页面会生成一次性字符串,并将其附加到每个链接。然后检查此字符串是否与数据库/平面文件中的条目匹配,如果匹配,则允许访问。如果没有,您拒绝访问。然后,您将使令牌无效,以便用户必须再次浏览该页面。

答案 2 :(得分:1)

限制访问页面的唯一方法是使用某人的凭据,没有可靠的方法来检测用户来自哪里,因为这可能是欺骗性的。

因此,只有当用户来自页面A时,才能允许访问页面B(除非您通过HTTP_REFERER不可靠地执行此操作

您还可以在页面A上设置cookie(或会话变量)而不显示页面B,除非用户设置了cookie(会话变量),但这不需要用户直接从页面A到页面乙

答案 3 :(得分:1)

一种简单的方法是在第一页上设置一次性会话变量,并在第二页上读取该变量。

例如,第1页:

$_SESSION['viewed_page1'] = true;

第2页:

if(!$_SESSION['viewed_page1']){
  echo 'You need to visit page 1 first!';
}

答案 4 :(得分:0)

您可以使用会话变量并传递特定的密钥'从一个页面,并在下一页上要求它以显示它。

您可以找到有关会话here

的信息