0

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

我读到 usingHTTP_REFERER不是最好的主意,因为它对浏览器不是强制性的……你会怎么做(代码示例)?

4

5 回答 5

3

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

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

然后在下一页

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

或类似的东西....

于 2012-11-19T19:42:39.290 回答
3

最防弹的解决方案是传递一个 _GET 参数,这个参数并不容易从一页猜测到下一页,a-la 唯一标记。

然而,要正确实现它需要付出巨大的努力,因为它不是最简单的解决方案,而且到目前为止也不是最简单的实现。

按照复杂性的顺序,最简单的在顶部,您的替代方案是:

  • 推荐人
  • 使用固定的 GET 参数
  • Cookie 放置在用户的第一页上。不适用于不接受 cookie 的访问者,如果您在欧盟工作,则需要 cookie 政策。
  • 使用 nonce 作为 GET 参数

最后一个解决方案详细

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

于 2012-11-19T19:42:46.327 回答
1

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

因此,只有当用户刚刚来自页面 A 时,才允许访问页面 B(除非您通过HTTP_REFERER

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

于 2012-11-19T19:42:14.987 回答
1

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

例如,第 1 页:

$_SESSION['viewed_page1'] = true;

第2页:

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

.

于 2012-11-19T19:43:17.290 回答
0

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

你可以在这里找到关于会话的信息

于 2012-11-19T19:42:45.933 回答