是一个可写的文件安全漏洞?

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

从本质上讲,我有一个forms,只是从一个文件保存和恢复数据,所以我不必处理数据库。 这在我的本地开发机器上运行得非常好,我将把它放在一个更公共的机器上与其他人分享。

有没有真正的安全风险,只是该文件可以通过我的PHP脚本?

如果文件的名称不依赖于用户input,那么几乎没有风险。 如果是这样,你必须确保依赖用户的部分已经过很好的消毒,通过删除所有潜在的危险字符,如。,/或。

其他人通过填充磁盘提到了可能的DOS; 但是你也可以用数据库来承担风险。

那么还有另一个风险,它本身不是一个脆弱性,但可以作为一个整体。 攻击者可以使用该方法在服务器上创build自己select的内容,并通过执行漏洞利用该漏洞来利用漏洞。 大多数情况下,如果让用户创build一个.php文件并让它通过服务器访问,问题就会出现。 用户只需要打开http://yourserver/uploads/hisupload.php来做他想做的事情。

避免此问题最安全的方法是将所有上传的文件放在服务器目录之外 。 这意味着您必须通过自己的php脚本来提供文件,而不是直接向外部提供。 通常在Unix上,你的php脚本在/ var / www / html下面。 例如,只要你在脚本/ var / www / uploads下写脚本,web服务器就没有办法去那里,除非你用httpd.conf做了一些愚蠢的事情。

如果你不能控制这个,那么使用一个.htaccess来限制对这个特定目录的访问,并且/或者确保这些文件不能像PHP或者服务器端包含(.shtml)一样通过附加一个安全扩展如.html或.txt。

另外还有DoS风险,您必须确保内容已被清理,以便PHP在将文件读回文件时,数据不会被解释为代码。 使用SQL的一个好处是对SQL数据进行清理是一个相当标准和易于理解的过程,而我不确定最新的技术是否适用于PHP。

从脚本方面可以填充它具有写入权限的文件系统,注意DoS的潜力。