我发现这个片段说只允许某些文件类型.它会工作吗,有人可以绕过它来上传他们想要的文件类型吗?并且有人可以解释子部分,我不知道它是如何工作的..
<?php
function CheckExt($filename, $ext) {
$name = strtolower($filename);
if(substr($name, strlen($name) -3, 3) == $ext)
return true;
else
return false;
}
?>
Run Code Online (Sandbox Code Playgroud)
检查扩展程序的更好方法
function checkExt($filename, $ext)
{
$fnExt = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
if(!is_array($ext)) {
$ext = (array)$ext;
}
$ext = array_map('strtolower', $ext);
return in_array($fnExt, $ext);
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样称呼它
var_dump(checkExt('test.temp', 'tmp')); // false
var_dump(checkExt('test.temp', array('tmp', 'temp'))); // true
Run Code Online (Sandbox Code Playgroud)
避免使用substr,因为扩展长度未知(您也可以使用substr&strrpos,但php为您提供此功能)
绕过非常容易,因为更改文件的扩展名不会改变文件的内容.因此,无论如何,.exe重命名为a .jpg仍然是.exe等待运行.您可以将它用于基本检查,但不要仅依靠它来验证文件类型.
这个substr()电话:
substr($name, strlen($name) -3, 3)
Run Code Online (Sandbox Code Playgroud)
是 更好 更简单地写为:
substr($name, -3)
Run Code Online (Sandbox Code Playgroud)
哪个PHP只是解释为'只接受最后3个字符$name'.
编辑:它本身并不是更好,因为文件扩展名不一定必须是3个字符长.它们可能是2,它们可能是4,5,甚至10.这就是为什么我说,检查文件扩展名不是很可靠.
| 归档时间: |
|
| 查看次数: |
423 次 |
| 最近记录: |