【问题标题】:Restrict access to page based on referrer page根据引用页面限制对页面的访问
【发布时间】:2018-06-06 03:52:29
【问题描述】:

只有当访问者来自特定的 wordpress 页面时,我才需要限制对页面的访问。

我从早上开始就在这里阅读,我看到的大多数答案都不鼓励使用“公正”的引荐来源网址,因为它可能是欺骗性的。

我对 php 的安全性和漏洞了解不多。我唯一的目标是“劝阻”用户为页面添加书签并直接访问它。我需要在我们的 wordpress 网站上验证访问者,并仅在他们通过身份验证时将他们指向该页面。

目前我想到的就是这个。

<?php

$ref = $_SERVER['HTTP_REFERER'];

$theOrigins = array(
'http://mysite.tld/?page_id=x1',
'http://mysite.tld/?page_id=x2');

$validRef = false;

if (in_array($ref, $theOrigins)) {
$validRef = true;
}


if (isset($_GET['passkey']) && ($_GET['passkey'] == 'thePasskey') &&  $validRef ) {
?>

<show html page>

<?php
} else {
//echo 'You are not supposed to access this page directly';
header('HTTP/1.0 403 Forbidden');
exit('Forbidden');
}
?>

这主要是基于这篇文章中的答案

What is the best way to password protect folder/page using php without a db or username

我打算在这个页面中添加解决方案

http://thisinterestsme.com/restricting-access-referrer/

但是根据这篇文章,

Passing PHP Session Value

wp 不使用会话

这个关于如何使用 wp session 的说明是否不再适用于当前的 wp 版本?

https://silvermapleweb.com/using-the-php-session-in-wordpress/

我有什么选择?

谢谢

【问题讨论】:

  • 在我看来并没有错。如果您浏览您的网站会发生什么?
  • 为什么在他们通过身份验证时不设置会话并检查而不是检查引荐来源网址?并不总是设置引荐来源标头,因为某些路由器出于隐私原因将其清除。如果有人有这样的路由器,他们将永远无法访问该页面。
  • @MatthiasMoritz 没有错,但我在这里看到的大多数答案都不鼓励将引用者作为身份验证形式,因为它可能是欺骗性的。
  • @MagnusEriksson 这是计划,但我提供的链接之一说 wp 没有会话。我引用了帖子“WordPress 核心不使用 PHP 会话。WordPress 平台是完全无状态的,不支持使用 cookie 之外的会话来保持用户登录。”
  • 没有阅读完整的文章,但是是的,类似的。

标签: php wordpress security authentication


【解决方案1】:

莫恩,

如果您知道您正在尝试做的事情是不安全的(可能会操纵 HTTP 标头 HTTP_REFERER),您可以尝试对允许的 URL 不那么具体。也许只是检查正确的主机:

if(strpos($ref, 'mysite.tld') !== false && $_GET['passkey'] == 'thePasskey')
{ ... }

【讨论】:

  • OP 已经在检查完整的 URL(包括主机名 查询字符串),所以我不明白为什么这个(只检查主机名)会更安全?
  • 这个建议的目的不是为了更安全。目标是在没有 GET 参数的情况下验证引用者。已发布代码的第一个 if 的 in_array 条件不考虑 GET 参数“passkey”,因此第二个 if 永远不会为真。因此,最好在验证引用 URL 时不那么具体
猜你喜欢
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
  • 2011-01-02
  • 2012-09-14
  • 2023-03-15
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
相关资源
最近更新 更多