我正在尝试开发一个小型社交网络,并想知道以下方法是否足以使我的“文件上传处理脚本”尽可能安全。我的目标是允许我的用户上传图像[jpeg,jpg,png,gif],视频[3gp,wma,mp4]和mp3文件。我在SO处经历了许多问题,但大多数问题似乎都是处理图片上传的细节而不是视频和mp3。我想知道我还能做些什么来使脚本成为可用的msot安全上传脚本。 [是的,我对安全性非常偏执,并且肯定希望我的网站以其安全而不是速度而闻名]。 我目前的做法如下:
在.htaccess文件中,将添加以下内容:
SetHandler none
SetHandler default-handler
Options -ExecCGI
php_flag engine off
ForceType application/octet-stream
<FilesMatch "(?i)\.jpe?g$">
ForceType image/jpeg
</FilesMatch>
<FilesMatch "(?i)\.gif$">
ForceType image/gif
</FilesMatch>
<FilesMatch "(?i)\.png$">
ForceType image/png
</FilesMatch>
<FilesMatch "(?i)\.mp3$">
ForceType audio/mpeg
</FilesMatch>
<FilesMatch "(?i)\.mp4$">
ForceType video/mp4
</FilesMatch>
我正在尝试的代码如下:
$fileInput = $_FILES['image'];
$sizeLimit="4000";
if($fileInput['error'] === UPLOAD_ERR_OK && isset($fileInput['tmp_name'])){
if($fileInput['size'] < $sizeLimit){
$cleanedName=stripslashes($fileInput['name']); //cleaning file name
$checking = pathinfo($cleanedName); //finding extension
$ext=$checking['extension'];
$finfo = finfo_open(FILEINFO_MIME_TYPE); // find mime type
$mimetype = finfo_file($finfo, $fileInput['tmp_name']);
finfo_close($finfo);
.
.
.//generate random name and use move_uploaded_file() and chmod()
}
}
这种方法是否足以保证我的网站安全,或者这种方法存在一些明显的缺陷?在此先感谢您的帮助。
答案 0 :(得分:0)
建议检查文件扩展名,但要注意mime类型很容易被欺骗,因此这不是一个很好的安全检查。
到目前为止你所拥有的是好的,我的额外提示是:
X-Content-Type-Options: nosniff
标头提供文件,以防止通过IE浏览器进行任何XSS
攻击。