只检查上传文件的扩展名是否足够安全?如果不是我还应该检查什么?
public function saveUploadedFile($fileInputName, $fileLocation)
{
$fileName=$_FILES[$fileInputName]['name'];
if(substr($fileName,-4,4)=='.php')
{
my_error('have some cake');
return FALSE;
}
else
{
move_uploaded_file($_FILES[$fileInputName]['tmp_name'],$fileLocation.$fileName);
}
}
答案 0 :(得分:4)
我要改变的一件事是你的条件:
if(substr($fileName,-4,4)=='.php')
您正在做的是将.php
个文件列入黑名单,这些文件本身就是好的。但是,(正如在对问题的评论中指出的那样),您应该采用白名单文件类型的方法。所以对于条件,你会检查相反的情况。
而不是逻辑上说“如果文件是.php就失败”,你在逻辑上会说“如果文件不是.jpg或.gif或.doc等则失败”。拥有允许类型的完整列表并禁止所有其他类型通常更安全,并有助于防止人们偷偷摸摸坏文件。
这不是一个完整的安全解决方案,但通常白名单比黑名单更安全。
答案 1 :(得分:3)
您应该检查扩展名filesize($filename)
; MimeType finfo_open(FILEINFO_MIME_TYPE);
(如果您使用> PHP 5.3;您应该检查文件是否存在file_exists($filename)
;我认为应该这样做。您还应该检查其他扩展名,例如.js,.phtml除非您希望将这些内容上传到您的服务器。