在开发基于 Web 的应用程序时,不要允许用户访问(读取)程序包含文件和配置文件等文件。这些数据可能提供足够的信息(例如,密码)来入侵系统。请注意,此指南有时也适用于其他类型的应用程序。您可以采取以下几种措施来实现这一点,包括
将包含/配置文件放在 Web 文档根目录之外(这样 Web 服务器将永远不会提供这些文件)。实际上,除非有某种原因必须将文件放在文档根目录中,否则这是最佳方法。
配置 Web 服务器,使其不会将包含文件作为文本提供。例如,如果您使用 Apache,您可以像这样为 .inc 文件添加处理程序或操作
<Files *.inc> Order allow,deny Deny from all </Files> |
将包含文件放在受保护的目录中(使用 .htaccess),并将它们指定为不会被提供的文件。
使用过滤器拒绝访问这些文件。对于 Apache,可以使用以下方法完成
<Files ~ "\.phpincludes"> Order allow,deny Deny from all </Files> |
如果您的包含文件是有效的脚本文件,服务器将对其进行解析,请确保它不会对用户提供的参数起作用,并且它被设计为安全的。
如果用户可以访问您的文件所在的目录(如果它们是全局可读的),这些方法无法保护您。您可以更改文件的权限,以便只有 Web 服务器的 uid/gid 可以读取这些文件。但是,如果用户可以让 Web 服务器运行他自己的脚本(用户可以编写脚本来访问您的文件),则此方法将不起作用。从根本上说,如果您的站点托管在与不受信任的人共享的服务器上,则更难保护系统安全。一种方法是运行多个 Web 服务程序,每个程序具有不同的权限;这提供了更高的安全性,但在实践中很麻烦。另一种方法是将这些文件设置为仅由您的 uid/gid 读取,并让服务器以“您的”权限运行脚本。后一种方法有其自身的问题:这意味着服务器的某些部分必须具有 root 权限,并且脚本可能具有超出必要的权限。