检索本地文件路径而不是用户输入时,file_get_contents()有多安全?

时间:2018-07-28 01:21:44

标签: php file security file-io file-get-contents

我让用户输入了HTML内容,这些内容存储在没有扩展名的文件,系统命名的文件夹而非用户命名的文件中。

>    file_put_contents($DBStoredFolder.'/'.$DBStoredFilename, $UserInputHtml);

检索内容和打印内容有多安全?

>    $content = file_get_contents($DBStoredFolder.'/'.$DBStoredFilename);
>    echo '<html><body>'.$content.'</body></html>';

不带扩展名的文件只能通过固定路径上的file_get_contents访问然后回显吗,运行PHP代码吗?

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

1 个答案:

答案 0 :(得分:1)

通常无法回答该问题。

如果您完全控制文件名(即,用户输入不会干扰文件名),那么可以安全地在该路径下打开文件。

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

如果您完全控制文件中的格式,并且可以确定它已经是HTML,那么在显示之前无需对内容进行转义或消毒。

尽管如此,其中的一个或多个假设几乎总是无效的。如何应对不确定性完全取决于具体情况。通常,清理文件名,清理文件内容,清理显示内容,清理所有内容。

就我个人而言,我宁愿谨慎处理自己控制的文件名,也不愿冒险引入用户输入而没有意识到。