我遇到了一个问题,我需要在上传时清理文件名,但我需要它才能使用多语言而不是安全风险。
所以目前我正在使用以下内容。
$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,解决此问题的最佳方法是什么,这会导致黑客试图通过文件名注入代码带来安全风险?
任何帮助将不胜感激
由于
答案 0 :(得分:1)
这是一个老问题,但我今天遇到了同样的情况,想分享我最终要使用的内容:
function preventCode($str){
return preg_replace("/[^[:alnum:][:space:]]/u", '', $str);
}
u:用于unicode。
测试您提供的字符串示例:
$string = 'สวัสดีชาวโลก ให้ได้ บุคคลนี้เริ่มต้น <?php echo \'hello\'; ?>';
echo preventCode($string);
结果:
php回声你好