我最近设置了一个新的虚拟服务器来托管我的网站。我对基于 Linux 的系统和系统管理的东西还很陌生,因此对文件和目录权限有一些疑问。
我的主站点位于 /var/www,其中有一个目录,我在其中保存了一些 PHP 脚本,其中一个包含数据库的连接详细信息。我希望确保没有人可以通过访问 www.mydomain.co.uk/mydir 来访问这些脚本,但 www-data 用户仍然可以访问这些脚本,以便可以从站点上的其他页面调用和执行这些脚本。
我最初的想法是将文件的权限更改为 400;但是,我不知道对于目录的权限该怎么做。
我如何更改目录的权限,以便人们访问 www.mydomain.co.uk/mydir 时可以执行其中的文件但看不到它们?
答案1
您可以通过 apache 配置修复此问题。请参阅http://httpd.apache.org/docs/2.2/howto/access.html
用一个
<Directory /mydir>
Order deny,allow
Deny from all
</Directory>
,外部对该目录的访问被阻止,但是 php 脚本仍然可以访问它。
答案2
正确配置的 Apache/PHP 堆栈不会允许包含数据库详细信息的 .php 文件输出到浏览器,因为浏览器会将其解释为 .php 脚本而不是文本。因此,如果有人无意中发现了该目录或文件,他们将看不到数据库登录信息 — — 再次强调,前提是 Apache 配置正确并且脚本中没有错误。
但是,最好将脚本放在与面向公众的目录不同的目录中,该目录不由 Apache 直接提供。在 Stackoverflow 上搜索一下,可以找到许多有用的答案,下面是其中一个:
https://stackoverflow.com/questions/2573496/help-securing-files-access-with-htaccess-and-php
编辑:
还有另一个。
https://stackoverflow.com/questions/6524565/php-file-security-on-webserver
此外,如果您真的认真学习 PHP,我建议您在学习语言的同时学习一些框架,这些框架可以帮助您处理其中的一些内容,并在您不知道需要的领域提供安全性。PHP 本身并不是一种不安全的语言,但编写不安全的应用程序非常容易。
答案3
如果您有一个 index.php,那么即使他们转到 /var/www/mydir 也没关系,因为它只会显示 index.php 中的内容。