服务器目录的 [沉默是金]


服务器目录一般都会有 index.php, index.html 之类的默认文件名, 也就是说当访问的时候打的URL是目录名,会自动匹配默认的文件来显示.但是如果目录下并没有找到这样的[默认]文件,则会按照配置,一个是把当前目录下的文件列出来,二是显示 403 没有权限错误.后者会好一些,当然并不是所有服务器都会出于安全考虑把这个设置成不显示目录内容.

所以,你经常可以看到一些 index.php (特别是Wordpress 的一些插件目录), 里面是:

1
<?php //You don't belong here. ?>
<?php //You don't belong here. ?>

或者是:

1
2
3
<?php
// Silence is golden.
?>
<?php
// Silence is golden.
?>

当然还有很多版本,但无非都是防止目录被显示内容,这样访问者就不会知道目录下有哪些文件,也减少了风险,试想一下, 如果你目录下有一个叫 [secret.txt] 之类的文件,访问者如果知道有这文件,肯定会很好奇的.

其实,我觉得最完美的解决方案应该是:

1
2
3
4
5
<?php
  header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
  exit("<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\r\n<html><head>>\r\n<title>404 Not Found</title>\r\n</head><body>\r\n
<h1>Not Found</h1>\r\n<p>The requested URL " . $_SERVER['SCRIPT_NAME'] . " was not found on this server.</p>\r\n&lgt;/body></html>");
?>
<?php
  header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
  exit("<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\r\n<html><head>>\r\n<title>404 Not Found</title>\r\n</head><body>\r\n
<h1>Not Found</h1>\r\n<p>The requested URL " . $_SERVER['SCRIPT_NAME'] . " was not found on this server.</p>\r\n&lgt;/body></html>");
?>

这样,访问该目录URL,则会显示404未找到的错误,搞得和真的一样,迷惑居心不良的人.

在一些不能直接访问的PHP代码文件里,最前面都会加上类似的判断,用于防止文件被直接访问,比如配置文件 wp-config.php

1
2
3
4
5
6
if (!defined('IN_PHPBB'))
    exit;
 
// don't load directly
if ( !defined('ABSPATH') )
    die('-1');
if (!defined('IN_PHPBB'))
	exit;

// don't load directly
if ( !defined('ABSPATH') )
	die('-1');

这样做的好处是防止直接运行脚本报错导致一些敏感信息泄露.如果有一些目录含有一些LOG记录等敏感信息,则可以在 .htaccess 文件里配置:

order allow,deny 
deny from all 

这样任何这个目录下的文件就不可能被公开访问到.比如 iThemes Security 就把数据库保存还有LOG文件的目录设置成不可访问.

英文同步: https://helloacm.com/silence-is-gold-rule-in-webserver-directories/

GD Star Rating
loading...
本文一共 450 个汉字, 你数一下对不对.
服务器目录的 [沉默是金]. (AMP 移动加速版本)
上一篇: 如何取消 iThemes Security 插件的 Away Mode (离开模式)
下一篇: 心理不平衡

扫描二维码,分享本文到微信朋友圈
5d9fde06fce9c2bf21e0fd385074cc7a 服务器目录的 [沉默是金] 互联网 折腾 杂乱 网站信息与统计

6 条评论

  1. 兔二爷 | 理性的感性生活
  2. 兔二爷 | 理性的感性生活

评论