безопасность — Php чистый многоязычный имя файла

Я столкнулся с проблемой, мне нужно очистить имя файла при загрузке, но мне нужно, чтобы оно работало на нескольких языках и не было угрозой безопасности.

В настоящее время я использую следующее.

$fileName = preg_replace('/[^\w\._]+/', '_', $fileName);

Это найти для любых английских символов. Но с любыми другими языками арабский норвежский и т.д.

Так что это имя файла будет

Kan få dette arbeids.mp3

выход

Kan_f_dette_arbeids.mp3

Будет ли этого достаточно, чтобы предотвратить хакеров?

function preventCode($str){
$special_chars = array("?", "[", "]", "/", "\\", "=", "<", ">", ":", ";", ",", "'", "\"", "&", "$", "#", "*", "(", ")", "|", "~", "`", "!", "{", "}");
return str_replace($special_chars, '', $str);
}

$string = 'สวัสดีชาวโลก ให้ได้ บุคคลนี้เริ่มต้น <?php echo \'hello\'; ?>';

echo preventCode($string);

Каков наилучший способ справиться с этим, если я удалил preg_replace, может ли это вызвать угрозу безопасности для хакеров, пытающихся внедрить код через имя файла?

Любая помощь будет оценена

Спасибо

1

Решение

Это старый вопрос, но я сталкиваюсь с той же ситуацией сегодня и хочу поделиться тем, что я закончил использовать:

 function preventCode($str){
return preg_replace("/[^[:alnum:][:space:]]/u", '', $str);
}

U: для Unicode.

Тестирование предоставленного вами примера строки:

$string = 'สวัสดีชาวโลก ให้ได้ บุคคลนี้เริ่มต้น <?php echo \'hello\'; ?>';
echo preventCode($string);

Результат:

P hel lo โลก ให ได ตน ค คล น เร ตน p php echo hello

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]