服务器目录一般都会有 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 个汉字, 你数一下对不对.loading...
上一篇: 如何取消 iThemes Security 插件的 Away Mode (离开模式)
下一篇: 心理不平衡
扫描二维码,分享本文到微信朋友圈
不明觉厉!
小赖子,你的缓存好像有点问题.这里显示的是”《服务器目录的 [沉默是金]》上有2条评论”,但是我只看到我自己的一条.我记得之前在你的某篇文章的评论里有人提到类似的问题,说是有5条评论,实际上看到不足5条.
wordpress 的 ‘ping back’ 也算一条评论.
恩,明白了.
坐等今日故事会.
写不动了…等会洗个澡玩盘游戏睡觉了.:)