Достаточно ли (???) я защищен, если поступаю так: параметр "name" я получил из адресной строки.
name - это кусок имени, директории туда не должны попадать.
Дальше я должен получить какой-то файл, соответствующий этому имени.
private function _avoidPathTraversal($name)
{
if (strpbrk($name, "/\\%\0") !== FALSE)
throw new Exception('Path traversal attempt');
}
public function getSomethingByName($name)
{
_avoidPathTraversal($name);
$filePath = APP_DIR . $name . '.txt';
// … real work
}
IMHO, этого достаточно, но лучше спрошу знающих людей — можно ли обойти такую проверку?
См. по теме: http://www.owasp.org/index.php/File_System#Path_traversal