假设我们有一个共享主机。web根目录位于/home/username/www/
。现在,我有一个PHP应用程序,它读取位于/home/username/www/include/config.json
的配置文件。该配置文件保存了密码和其他配置信息。假设访问/home/username/
或web根目录以外的任何目录是不可能的,我该如何从直接访问GET
的人那里保护config.json
?
如果在明文文件中存储配置信息是不可行的,请建议其他方法。
有两种方法可以保护目录结构并防止读取目录中的其他文件和内容。
禁用目录内容列表
使用htaccess在.htaccess文件中添加以下内容将禁用目录列表。
Options -Indexes
使用index . html 如果服务器不允许这样做,那么最简单的方法是在所有目录中放置一个虚拟的index.html文件。这样当目录路径被访问时,index.html将打开。
将资源保留在WEB_ROOT之外
当在服务器上托管应用程序时,路径通常是这样的:
/var/www/
或
/home/username/www/
所有的网页内容都保存在www内,然后只有它可以在网站上访问。但是那些不能直接从url访问的内容,可以保存在/www
之外。
例如上传图片,或资源文件,或包含数据库连接参数或任何文件。
在 中浏览器调用的php文件/var/www/
中的其他资源文件/var/outside/
通过这样做,即使启用了目录列表,文件也会自动对外界不可见。
你需要一个。htaccess文件在你的include目录中,使它从外部不可用:
Options -Indexes
Order allow,deny
Deny from all
或apache 2.4
Options -Indexes
Require all denied
另一个解决方案是将include移动到/home/username/include