如何使用htaccess保护单个php页面?

时间:2015-06-18 08:22:21

标签: php .htaccess

我想限制网站中的PHP页面。此页面位于CMS中。

页面是这样的。

http://bioenergysciences.com/innerpage.php?id=1

为此,我更新了我的.htaccess文件。

AuthName "Restricted Area" 
AuthType Basic 
AuthUserFile /home/bioenerg/password/.htpasswd 
AuthGroupFile /dev/null 
<Files http://bioenergysciences.com/innerpage.php?id=1>
   require valid-user
</Files> 

然后我在名为&#34;密码&#34;的文件夹中创建了.htpasswd文件。因为如果我们在根文件夹中创建它,这是不安全的。

然后我将生成的密码添加到此文件中。 我的.htpasswd文件是这样的。

bioenergysciences:NnrhAhZ/Nc912

1 个答案:

答案 0 :(得分:1)

您应该在<Files>中命名文件名。或者,您可以使用<Location>

AuthName "Restricted Area" 
AuthType Basic 
AuthUserFile /home/bioenerg/password/.htpasswd 
AuthGroupFile /dev/null 
<Files "innerpage.php">
   require valid-user
</Files>

请注意,这不会检查查询字符串。将URL与查询字符串匹配是没用的,因为我只能转到http://bioenergysciences.com/innerpage.php?foo=bar&id=1,它与上述位置不匹配并绕过保护。

如果您不想保护整个innerpage.php而只保护id=1,请执行basic authentication in php

$authenticated = isset($_SERVER['PHP_AUTH_USER'])
 && $_SERVER['PHP_AUTH_USER'] === 'bioenergysciences'
 && $_SERVER['PHP_AUTH_PW'] === 'mypassword';

if ($_GET['id'] === 1 && !$authenticated) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Text to send if user hits Cancel button';
    exit;
}