我让用户输入了HTML内容,这些内容存储在没有扩展名的文件,系统命名的文件夹而非用户命名的文件中。
> file_put_contents($DBStoredFolder.'/'.$DBStoredFilename, $UserInputHtml);
检索内容和打印内容有多安全?
> $content = file_get_contents($DBStoredFolder.'/'.$DBStoredFilename);
> echo '<html><body>'.$content.'</body></html>';
不带扩展名的文件只能通过固定路径上的file_get_contents访问然后回显吗,运行PHP代码吗?
我知道返回的html在浏览器上运行时需要加以保护,但这是另一回事。
答案 0 :(得分:1)
通常无法回答该问题。
如果您完全控制文件名(即,用户输入不会干扰文件名),那么可以安全地在该路径下打开文件。
如果您完全控制文件的内容(即它不可能是用户上传或用户编辑的文件),则可以安全地显示它。
如果您完全控制文件中的格式,并且可以确定它已经是HTML,那么在显示之前无需对内容进行转义或消毒。
尽管如此,其中的一个或多个假设几乎总是无效的。如何应对不确定性完全取决于具体情况。通常,清理文件名,清理文件内容,清理显示内容,清理所有内容。
就我个人而言,我宁愿谨慎处理自己控制的文件名,也不愿冒险引入用户输入而没有意识到。