Php clean filename多语言

时间:2015-04-19 13:49:54

标签: php security upload multilingual

我遇到了一个问题,我需要在上传时清理文件名,但我需要它才能使用多语言而不是安全风险。

所以目前我正在使用以下内容。

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

这适用于任何英文字符。但是对于任何其他语言的阿拉伯语挪威语等,这些角色都会被删除。

所以这个文件名是

Kanfådettearbeids.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 个答案:

答案 0 :(得分:1)

这是一个老问题,但我今天遇到了同样的情况,想分享我最终要使用的内容:

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

u:用于unicode。

测试您提供的字符串示例:

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

结果:

  php回声你好