Я столкнулся с проблемой, мне нужно очистить имя файла при загрузке, но мне нужно, чтобы оно работало на нескольких языках и не было угрозой безопасности.
В настоящее время я использую следующее.
$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, может ли это вызвать угрозу безопасности для хакеров, пытающихся внедрить код через имя файла?
Любая помощь будет оценена
Спасибо
Это старый вопрос, но я сталкиваюсь с той же ситуацией сегодня и хочу поделиться тем, что я закончил использовать:
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
Других решений пока нет …