我有一个基本的php文件上传脚本,直到最近一直工作正常。没有对上传脚本进行任何更改。通过测试/故障排除,我注意到如果jpeg图像方向是横向(宽度大于高)并且文件大于4.5MB,则下载将锁定大约7%的上载文件。如果我将图像旋转为纵向并保持文件大小相同,或者如果我缩小图像大小并使其保持横向,则上传将完成。
让我感到困惑的是,纵向更大的文件会上传得很好,将文件上传到服务器时图像方向是否重要?
首先,我使用Javascript和AJAX来设置上传,然后调用php脚本。 Javascript / AJAX是:
function uploadFile()
{
var formdata = new FormData();
var location=document.getElementsByName("file");
var file = location[0].files[0];
formdata.append("file", file,location[0].id+"_"+date+"."+file.type.substring(file.type.indexOf("/")+1));
var ajax = new XMLHttpRequest();
_("progressBar").style.visibility="visible";
ajax.upload.addEventListener("progress", progressHandler, false);
ajax.addEventListener("load", completeHandler, false);
ajax.addEventListener("error", errorHandler, false);
ajax.addEventListener("abort", abortHandler, false);
ajax.open("POST", "as_built_replace_uploader.php");
ajax.send(formdata);
}
我上传的PHP是:
$filename = $_FILES["file"]["name"];
$file_tmp_loc = $_FILES["file"]["tmp_name"]; // File in the PHP tmp folder
$file_type = $_FILES["file"]["type"]; // The type of file it is
$file_size = $_FILES["file"]["size"]; // File size in bytes
$file_error_msg = $_FILES["file"]["error"]; // 0 for false... and 1 for true
$wildcard="maps/".substr($filename,0,strpos($filename,"."))."*";
foreach (glob($wildcard) as $path)
{
unlink($path);
}
if(move_uploaded_file($file_tmp_loc,"maps/".$filename))
答案 0 :(得分:0)
正如@ÁlvaroGonzález所观察到的,PHP 本身甚至在上传时都没有读取文件;它甚至不知道它是JPEG,更不用说它的宽高比了。
所以某人必须在上传文件时对该文件执行某些操作。可能我们正在研究一些针对某些JPEG漏洞的过于聪明的防火墙规则的不良影响。尝试使用一小块垃圾预先添加相同的文件。它将不再是JPEG,但大多数IDS仍会“看到”内部的任何内容,并作出反应。如果上传仍然阻止,即使文件不再是图像,我相信这将是防火墙/ IDS干扰的一个有力论据。
与管理上传服务器的人交谈也可能有助于揭开一些亮点。
但在此之前,您是否完全确定这样大型文件的上传方式是否正确?重要的是编码尺寸,而不是原始图像尺寸。检查php.ini中的upload_max_filesize
和post_max_size
。