2013-10-08 2 views
3

Я знаю золотое правило, никогда не доверяю указанным пользователем именам файлов. Однако я хочу нарушить это правило. Есть ли что-то небезопасное по следующей схеме?Является regex safe для пользовательских имен файлов - PHP

$name = $_POST['name']; 
    $id = intval($_GET['id']); 

    $sanitized_name = preg_replace('/[^0-9a-zA-Z]/','',$name); 

    $fp = fopen("/path/to/".$id."/".$sanitized_name.".jpg",'w'); 

Если я заменю все, что не 0-9 или A-Z или A-Z с «», то есть абсолютно 0% изменение каждый может привнести «». для создания собственного расширения (с комбинацией NULL-байта) или перемещения по каталогу. Это кажется безопасным. Я просто хотел запустить его SO.

Кроме того, поскольку ID вынужден быть ИНТ, что-нибудь в стиле фанк просто превратится в 0.

+4

Почему в имени богов вы используете имена файлов HTML-кодировки ?! – deceze

+0

Это обычная дезинфекция, которую я скопировал и наклеил. Это не должно иметь значения, потому что любые символы HTML будут полосатыми в любом случае. Это не нужно и избыточно. Обычные имена, такие как «кот», будут оставаться «кошкой». '> cat' превратится в '> cat', который превратится в 'gtcat'. Не имеет значения, так как это было бы просто лишено. –

+9

«Безопасность» - это не то, что вы можете просто побрызгать своим кодом, например солью на еду, и ожидать, что волшебство станет лучше/вкуснее. Что такое ** ВАШИ ** требования безопасности? Возможно, вы разрешаете нескольким пользователям загружать файлы и только хотите, чтобы они имели доступ к своим собственным файлам. В этом случае этот код бесполезен, потому что пользователь A с файлом 'z.txt' может калечить имя файла и получить доступ к' y.txt', который принадлежит пользователю B. «oops». –

ответ

0

Если по безопасным вы имеете в виду пользователь не может заставить загрузку в другую папку или на другой добавочный номер, да, это хорошо.

Addtionnaly, для создания имени файла «более уникальным», вы можете добавить отметку времени time() и/или случайное число rand(0, MAX) в имени файла.

Смежные вопросы