服务器目录一般都会有 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/
强烈推荐
- 英国代购-畅购英伦
- TopCashBack 返现 (英国购物必备, 积少成多, 我2年来一共得了3000多英镑)
- Quidco 返现 (也是很不错的英国返现网站, 返现率高)
- 注册就送10美元, 免费使用2个月的 DigitalOcean 云主机(性价比超高, 每月只需5美元)
- 注册就送10美元, 免费使用4个月的 Vultr 云主机(性价比超高, 每月只需2.5美元)
- 注册就送10美元, 免费使用2个月的 阿里 云主机(性价比超高, 每月只需4.5美元)
- 注册就送20美元, 免费使用4个月的 Linode 云主机(性价比超高, 每月只需5美元) (折扣码: PodCastInit2022)
- PlusNet 英国光纤(超快, 超划算! 用户名 doctorlai)
- 刷了美国运通信用卡一年得到的积分 换了 485英镑
- 注册就送50英镑 – 英国最便宜最划算的电气提供商
- 能把比特币莱特币变现的银行卡! 不需要手续费就可以把虚拟货币法币兑换
微信公众号: 小赖子的英国生活和资讯 JustYYUK