我需要拒绝除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错误并停止继续页面。我怎么能写这样的东西?
答案 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 }?>