Мой url похож на page.php?path=content/x/y/z/aaa.md
Является ли следующий код php XSS безопасным?
include "Parsedown.php";
function path_purifier($path) {
if(substr($path, 0, 8) !== "content/")
return null;
if (strpos($path,'..') !== false)
return null;
return "./" . $path;
}
$parsedown = new Parsedown();
$path = $_GET['path'];
$path = path_purifier($path);
echo $parsedown->text(file_get_contents($path));
Спасибо за внимание
Да, выглядит достаточно безопасно, но все же не идеально. Вам также нужно вызвать is_file()
и убедиться, что он возвращает true, прежде чем вы вызове file_get_contents()
. Кроме того, чтобы сделать его еще более безопасным, вы можете реализовать защиту CSRF поверх нее.
Кроме того, имейте в виду, что некоторые хостинг-провайдеры не допускают относительных путей. Поэтому, если на вашем локальном компьютере может работать такой путь, как '/content/x/y/file.md'
, имейте в виду, что на некоторых хостерах этого не произойдет. Поэтому вам лучше использовать абсолютные пути, такие как __DIR__. '/content/x/y/file.md'
__DIR__. '/content/x/y/file.md'