对于图片上传网站,我需要具备基本的一致性,即上传文件是图像,而不是可能影响服务器或网站客户端的有害代码。请不要将此副本标记为以下任何问题。我也遇到了类似的问题。
需要指导在PHP和jQuery前端的实际代码实现中开始使用这种方法。
Security issues in accepting image uploads
Is it important to verify that the uploaded file is an actual image file?
答案 0 :(得分:1)
第一步是尝试确定您可以使用exif_imagetype
执行的图像类型,例如:
$valid_types = array('jpeg','jpg','gif','png');
if (($type = exif_imagetype($_FILES['image']['tmp_name'])) &&
in_array(ltrim(image_type_to_extension($type), '.'), $valid_types)) {
// image appears to be valid
为了进一步提高安全性,您应该将文件上传到无法通过浏览器访问的文件夹,并重命名该图像。例如:
$upload_path = '/path/to/uploads'; // folder ABOVE www or public_html
$hash = hash_file('sha1', $_FILES['image']['tmp_name']);
$ext = image_type_to_extension($type);
$fname = $hash . $ext;
// save it
if (move_uploaded_file($_FILES['image']['tmp_name'], "$upload_path/$fname")) {
// image was saved
或者,您可以尝试使用GD库或Imagick重绘它,而不是使用move_uploaded_file
,而只保存重绘副本。如果图像包含任何错误,那么这些库将无法绘制它。
这应该足够安全。即使用户确实设法利用某些漏洞,他们也无法执行它,除非您以可预测的方式将其反馈给他们,但它仍然不太可能。