« 上一篇下一篇 »

代码组织

有些开发人员认为,互联网上任何不能用户直接访问的文件都不应该保存在Web站点文档目录。如:如果消息公布板站点的文档个目录位于/home/httpd/message-board/www,应该将所有引入文件以及为站点编写的其他文件保存在其他位置,可以使用如下所示代码:
require-once(’. ./code/user-object.php);

这样做的原因是当一个恶意用户请求一个非.php或.heml文件时可能会发生的状况。在默认的情况下,许多Web服务器将那个文件内容导出输出流。因此如果打算在公共文档个目录保存user-object.php文件,而用户又要请求该文件,该用户可能会在Web浏览器中看到完整的代码。这就会让用户看到我们的代码实现,获取这个文件中的任何知识产权以及可能找到我们忽略漏洞。

想要避免这种情况,我们应该确保Web服务器被配置为只允许请求 .php和.html文件,而对其他类型文件的请求必须返回错误。

同样的,任何其他文件,如:文本文件、密码文件、配置文件或特殊目录,都必须与公共文档根目录隔离。即使认为已经正确地配置的Web服务器,我们也可以忽略某些问题,或者在将来,Web应用转移到一个未正确配置的新服务器,我们可能就会暴露一些漏洞。

如果在.php.ini文件启用了allow-url-fopen选项,在理论上,我们可以引入或请求远程服务器文件。这可能是我们应用的另一个安全失误,因此应该避免引入其他机器上的文件,尤其是那些我们并没有完全控制的机器。同样的,在选择需要引入或请求那个文件时,不能使用用户输入,因为糟糕的输入也会导致问题。

« 上一篇下一篇 »