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