2015-04-19 3 views
1

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

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

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

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

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

Кан 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: для юникода.

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

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

Результат:

สว สด ชาว โลก ให ได บ ค คล น เร ม ตน PHP эхо привет