PHP脚本阻止未经授权的用户访问页面

时间:2011-12-01 17:25:02

标签: php

我必须编写一个页面,该页面只允许点击特定链接的用户访问该页面。我不希望人们能够直接在地址栏中键入地址并有权访问。仅来自该页面上的特定页面和特定链接。

安全性非常重要,因为它适用于产品下载。

任何人都知道如何在PHP中执行此操作?

6 个答案:

答案 0 :(得分:1)

您需要建立会话跟踪(记录用户)。仅使用链接并使用推荐类型检查是不够的。

同样对于下载,我会创建一个像download.php文件这样的处理程序来获取要下载的页面。

如果有人访问过一次,没有人会复制你的文件。

答案 1 :(得分:1)

您最好的选择是使用会话并对用户进行身份验证。然后,检查他们是否已登录此“下载”脚本的顶部。

或者,您可以选中使用$_SERVER['HTTP_REFERER']变量并在页面顶部检查它们来自正确的位置。这会(我认为)阻止用户通过输入URL直接进入下载页面

if ($_SERVER['HTTP_REFERER'] == 'http://mysite.com/downloadlist.php') {
    //proceed
} else {
    //kick user out
}

但就像我说的那样,会议是去这里的方式。来自HTTP_REFERER上的PHP manual

  

将用户代理引用到的页面地址(如果有)   当前页面。这是由用户代理设置的。并非所有用户代理都会   设置这个,有些提供修改HTTP_REFERER的能力   特征。简而言之,它无法真正被信任。

答案 2 :(得分:1)

我会用一次哈希下载。向用户显示下载页面和链接,如:

/download.php?downloadId=3B4A34086BH56FH5343DC

哈希存储到数据库中。在download.php中,检查哈希是否在数据库中。如果是,则推送下载数据并从数据库中删除哈希。如果其他人试图使用该链接,他将无法获取数据,因为哈希将不再存在于数据库中。

(如果您没有数据库访问权限,可以使用散列命名文件存档,并使用unlink()存档)

答案 3 :(得分:1)

您不应将referer用作身份验证方法。可以轻松更改或设置引用者。例如,此命令将我的引用设置为stackoverflow.com:

curl -e http://stackoverflow.com/ -D - brb3.org/referrer.php

它的输出看起来像这样:

HTTP/1.0 200 OK
Date: Thu, 01 Dec 2011 17:43:55 GMT
Server: Apache/2.2.16 (Debian)
X-Powered-By: PHP/5.3.3-7+squeeze3
Vary: Accept-Encoding
Content-Length: 54
Content-Type: text/html
X-Cache: MISS from localhost
X-Cache-Lookup: MISS from localhost:8080
Via: 1.0 localhost (squid/3.1.14)
Connection: keep-alive

$_SERVER['HTTP_REFERER'] = http://stackoverflow.com/

您应该使用一次性哈希下载脚本或会话。

答案 4 :(得分:0)

您可以使用PHP HTTP身份验证:

http://php.net/manual/en/features.http-auth.php

答案 5 :(得分:0)

你也可以使用一些JS,所以当用户链接到你的页面时附加一些POST参数,并以这种方式进行快速而肮脏的测试。有关如何操作的链接是HERE。与其他人一致认为,最好的方式和最安全的方式是使用某种形式的身份验证。