可写文件是否存在安全漏洞?

可写文件是否存在安全漏洞?

如果我有一个正在读取/写入文件的 php 脚本,这是一个安全漏洞吗?

本质上,我有一个表单,它只是保存和恢复文件中的数据,因此我不必处理数据库。这在我的本地开发机器上运行良好,我打算将其放在更公共的机器上,与其他几个人共享。

如果文件仅能被我的 php 脚本写入,是否存在真正的安全风险?

答案1

如果文件名不依赖于用户输入,则风险很小。如果依赖于用户输入,则必须确保用户依赖部分已得到妥善清理,方法是删除所有潜在危险字符,例如 .、/ 或 。

其他人提到了填满磁盘可能导致 DOS;但使用数据库也会面临这种风险。

然后还有另一个风险,它本身不是漏洞,但可能成为漏洞。攻击者可以使用该方法在服务器上创建他选择的内容,并利用它执行漏洞。最常见的是,如果您让用户创建一个 .php 文件并允许通过服务器访问它,则会出现问题。用户只需打开http://你的服务器/uploads/hisupload.php做任何他想做的事。

避免此问题的最安全方法是将所有上传的文件外部服务器目录。这意味着您必须通过自己的 php 脚本提供文件,而不是直接向外部提供。通常在 Unix 上,您的 php 脚本位于 /var/www/html 下。例如,只需让脚本将它们写入 /var/www/uploads 下,Web 服务器就无法访问那里,除非您对 httpd.conf 做了一些愚蠢的事情。

如果您无法控制这一点,请使用 .htaccess 来限制对该特定目录的访问,和/或通过始终附加安全扩展名(例如 .html 或 .txt)来确保文件不能作为 PHP 或服务器端包含(.shtml)执行。

答案2

除了 DoS 风险之外,您还必须确保内容经过清理,以便当 PHP 从文件中读取数据时,数据不会被解释为代码。使用 SQL 的一个优点是清理 SQL 数据是一个相当标准且易于理解的过程,而我不确定 PHP 的最新技术水平如何。

答案3

由于脚本能够填充其具有写访问权限的文件系统,因此请注意存在 DoS 的可能性。

相关内容