Php 在检索本地文件路径而不是用户输入时,文件\u get\u contents()的安全性如何

Php 在检索本地文件路径而不是用户输入时,文件\u get\u contents()的安全性如何,php,file,security,file-io,file-get-contents,Php,File,Security,File Io,File Get Contents,我有用户输入的HTML内容存储在没有扩展名的文件中,在系统命名的文件夹中,而不是用户命名的文件中 > file_put_contents($DBStoredFolder.'/'.$DBStoredFilename, $UserInputHtml); 检索并打印内容的安全性如何 > $content = file_get_contents($DBStoredFolder.'/'.$DBStoredFilename); > echo '<html>&

我有用户输入的HTML内容存储在没有扩展名的文件中,在系统命名的文件夹中,而不是用户命名的文件中

>    file_put_contents($DBStoredFolder.'/'.$DBStoredFilename, $UserInputHtml);
检索并打印内容的安全性如何

>    $content = file_get_contents($DBStoredFolder.'/'.$DBStoredFilename);
>    echo '<html><body>'.$content.'</body></html>';
一个没有扩展名的文件是否只能通过文件获取固定路径上的内容,然后进行回显,运行PHP代码


我知道返回的html在浏览器上运行时需要加以保护,但这是另一回事。

一般来说,没有办法回答这个问题

如果您完全控制文件名,也就是说,用户输入不可能干扰文件名,那么在该路径上打开文件是安全的

如果您完全控制文件的内容,即它不可能是用户上传或用户编辑的文件,则可以安全地显示它

如果您完全控制了文件中的格式,并且可以确保它已经是HTML,那么在显示之前就不需要转义或清理内容

然而,几乎总是有一个或多个这样的假设并不真正有效。如何应对不确定性完全取决于具体情况。通常,清理文件名、清理文件内容、清理显示、清理所有内容


就我个人而言,我宁愿对自己控制的文件名过于谨慎,也不愿冒险在没有意识到的情况下引入用户输入。

谢谢,我做了研究,也看到了很多关于文件名的问题,但总是参考路径和文件名,而不是内容。因为PHP文档说它只以字符串形式返回结果,并且它的路径由服务器决定,所以我认为这是一种安全的方法。您对如何改进它有什么建议吗?问题是您正在显示用户输入的HTML。@PaulCrovella这也是我需要的,但我想确保file_get_contents只返回字符串形式的文件,而不执行任何代码示例:eval;也许htmlentities还不够,我完全可以控制文件名,但不能控制内容,因为它必须接受用户编辑的HTML和JS。我也在预防方面,这就是为什么我想确保file\u get\u内容只返回字符串形式的文件,并且不执行[Ex:eval;]之间的任何代码。在这种情况下,文件上的htmlentities是不够的。PHP只做您让它做的事情。如果你不运行eval,它就不会进行eval。危险不在于PHP会突然自行运行代码;这是因为在浏览器中显示受污染的文件内容将呈现并执行该文件所说的任何操作。谢谢您的回答。一个没有扩展名的文件是否只能通过文件获取内容,然后进行回显,运行PHP代码?我知道返回的html在浏览器上运行时需要保护,但这是另一回事。再次感谢!