从一个PHP文件中拒绝除localhost外的所有内容

时间:2014-05-03 07:27:14

标签: php

我需要拒绝除127.0.0.1之外的所有用户访问我的一个PHP文件。我已尝试在.htaccess文件中使用以下代码段:

<Files /file.php>
    Order deny,allow
    Allow from 127.0.0.1
    Deny from all
</Files>

...但这不起作用,所以我正在寻找一个解决方案没有 .htaccess。我最好想要一个可以插入页面顶部的片段,以确定用户是否是localhost。如果不是,它将发送403错误并停止继续页面。我怎么能写这样的东西?

4 个答案:

答案 0 :(得分:1)

试试这个。

将其放在要保护的PHP文件的顶部。

if($_SERVER['REMOTE_ADDR'] !== '127.0.0.1'){
     header('HTTP/1.0 403 Forbidden');
     echo 'You are not authorized to view this page';
     exit();
}

您也可以使用.htaccess。

来完成此操作
<Files "file.php">
    ErrorDocument 403 /html_file_that_displays_403_message.html
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Files>

答案 1 :(得分:0)

您可以像这样使用$_SERVER['REMOTE_ADDR']

<?php
if ($_SERVER['REMOTE_ADDR'] != '127.0.0.1')
{
    http_response_code(403);
    echo 'Access denied';
    exit;
}

根据this answer,相信这个变量是安全的。有些网站还建议您检查HTTP_X_FORWARDED_FOR。但是,在您的情况下,这可能是不必要的 - 代理使用此标头来确定原始IP并且可以轻易伪造。另一方面,REMOTE_ADDR由Apache(nginx)添加,其值保存了连接的确切IP地址。

你应该重新思考你的方法。您可能希望使用例如HTTP Digest添加某种授权,而不是对该文件进行防火墙访问。这允许您限制对的访问权限,而不是主机。

答案 2 :(得分:0)

在文件顶部试试这个:

if (!$_SERVER['SERVER_ADDR'] == $_SERVER['REMOTE_ADDR']){
   header('No Remote Access Allowed', true, 400);
   exit;
}

答案 3 :(得分:0)

<?php
if ($_SERVER['REMOTE_ADDR'] != '127.0.0.1'){
header('HTTP/1.0 403 Forbidden');?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>403 Forbidden</title>
</head>
<body>
    <h1>Forbidden</h1>
    <p>You don't have permission to access this page on this server.</p>
</body>
</html>
<?php }?>