我已经编写了一些代码来检查扩展程序的文件输入,只有在允许的情况下才通过,但它似乎无法正常工作。
我使用以下方法调用该函数:
$vcFileType = check_filetype($HTTP_POST_FILES['cv']['name'],"That filetype isnt allowed punk",array('doc','docx','pdf'));
,功能如下:
function check_filetype($file, $problem='', $types){
$fileExt = substr($file, strrpos($file, '.') + 1);
if(in_array($fileExt, $types)){
show_error($problem);
}
return $file;
}
如果有人能告诉我哪里出错了,那就太棒了。
干杯,
答案 0 :(得分:2)
if (in_array($fileExt, $types)) {
show_error($problem);
}
“如果扩展名是允许的扩展名之一,请显示错误...”
除了这个逻辑故障:永远不要相信用户提供的文件名!
它是完全随意的,很容易伪造
尝试实际处理文件或改为find its MIME type。
答案 1 :(得分:1)
确切地说,检查文件名的扩展名不是一种保存方式。例如,有人仍然可以将恶意文件隐藏在PDF文件中。
如果扩展名不正确,检查扩展名可能是初步检查的好方法,但跳过mime检查。
答案 2 :(得分:1)
看起来你只是抓住扩展的第一个字符。字符串位置+ 1。
此外,因为您正在寻找“。”的第一个实例。你的程序会破坏任何名为inc.functions.php的东西。
试试这个:
function check_filetype($file, $problem='', $types){
$file_parts = explode(".", $file);
$fileExt = array_pop($file_parts);
if(in_array($fileExt, $types)){
show_error($problem);
}
return $file;
}
这会根据“。”将文件名转换为数组。无论名称中有多少个,然后返回该数组的最后一个元素 - 扩展名。
答案 3 :(得分:0)
如果您使用的是Unix,则可以使用file
命令:它会检查文件的内容以推断其类型。