作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的网站上,我允许用户使用以下方式上传图片...
$max_filesize = 1572864; // 1.5MB
$upload_path = 'uploads';
$upload_path = $upload_path.'/';
$filename = $_FILES['profile_image']['name'];
if(filesize($_FILES['profile_image']['tmp_name']) > $max_filesize)
die('The file you attempted to upload is too large.');
if(!is_writable($upload_path))
die('permission errorrr!');
if(move_uploaded_file($_FILES['profile_image']['tmp_name'],$upload_path . $filename)){
// TA DA!
}
我只是在输入了关于它的安全性以及如何使其更加安全的一些意见后,我问我已经设法将文件从 .png 文件更改为 .jpg 并上传它,所以理论上 .exe 可以被重命名和上传,如果是这样,如何应对?
最佳答案
Mime 类型不可信,因此,正如@yoeriboven 所说,您可以使用:
if (!getimagesize($_FILES['profile_image']['tmp_name'])){
die('Not an image');
}
但您也可以不允许执行任何上传到您的上传文件夹的文件。您可以使用 .htaccess
(假设您使用的是 Apache)执行以下操作:
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
Options -ExecCGI
为了帮助用户,您可以做的另一件小事是使用 HTML5 的 accept
属性:
<input type="file" name="file" accept="image/gif, image/jpeg" />
(很明显,上面的内容可以在客户端更改,因此不能依赖它)
关于php - 安全图片上传 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16938950/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!