PHPファイルのアップロードで画像をアップロードする際の問題
質問
こんにちはみんな@PHPファイルアップロードメソッドを使用して画像をアップロードしています。一度に10個の画像をアップロードした場合(各画像は2000/3000次元です)。その後、オンクリック保存関数が機能していません。 5つの画像以下5枚未満の画像をアップロードして、その作業用のファインワットがコードを誤解している場合、この投稿にPHPコードを含めるだけです <input value="Save" type="submit" name="SubSave" id="SubSave" onClick="return changes();">
if($_POST['SubSave'] == "Save"){
$aid = $_GET['rid'];
$updcount = $_POST['theValue'];
if($_SESSION["almgtype"]==1 || (GetUserNoPhoto($_SESSION["almgid"]))>(GetTotalPhotoCount1($_SESSION["almgid"],$aid))) {
$uid = $_SESSION["almgid"];
for($k=1;$k<=$updcount;$k++) {
//echo $k;
echo $_FILES["uploadfile"]["type"];
if($_FILES["uploadfile".$k]["name"]!="") {
if(($_FILES["uploadfile".$k]["type"] == "image/gif") || ($_FILES["uploadfile".$k]["type"] == "image/jpeg")|| ($_FILES["uploadfile".$k]["type"] == "image/pjpeg") || ($_FILES["uploadfile".$k]["type"] == "image/png")) {
if ($_FILES["uploadfile".$k]["error"] > 0)
{
echo "Error: " . $_FILES["uploadfile".$k]["error"] . "<br />";
}
else
{
move_uploaded_file($_FILES["uploadfile".$k]["tmp_name"],
"photoalbum/" . $_FILES["uploadfile".$k]["name"]);
$uploadfile = "photoalbum/" . $_FILES["uploadfile".$k]["name"];
}
$path = $uploadfile;
$checklist = "select * from amt_photos1 where aid = '".trim($aid)."' and uid = '".trim($uid)."' and path = '".trim($path)."'";
$chkresult = mysql_query($checklist);
if(mysql_num_rows($chkresult) == 0) {
$i = 0;
$path =$uploadfile;
$result = "insert into amt_photos1 set uid = '".trim($uid)."',
aid = '".trim($aid)."',
path = '".trim($path)."',
status = '0',
createdby = '".$_SESSION["almgid"]."',
createddate = now()";
$rowlist = mysql_query($result) or die("Error:(".mysql_error().")".mysql_error());
}
/********************** if file already exist means ******************************************/
else {
$err= "The Uploaded file name ".$path." Is already exisit in the Album. Rename It or try to add Any other Photos";
}
/********************** if file already exist means ******************************************/
$path ="";
$uploadfile = "";
$i = "";
} // file extention
else {
$err= "Unable To Upload The File Please Check The File Extention.Try Again Later";
}
}
}
}
} // if save close
解決
おそらく、php.ini構成ファイルの最大ポストサイズを変更する必要があります(post_max_size
設定)。
他のヒント
コマンドを使用できます phpinfo()
構成をダンプします。おそらく、他の人が述べているように、アップロードサイズと実行時間を増やす必要があります。
これらはaを介して変更できます .htaccessファイル.
php_value upload_max_filesize 20M
php_value post_max_size 20M
php_value max_execution_time 200
php_value max_input_time 200
警告と同様に、アップロード処理スクリプトにより、サーバーを完全に破壊することが完全に些細なことになります。
- あなたは盲目的にそれを信頼しています
$_FILES[...]['type']
値は正しく設定されています - この値は完全にユーザーの制御下にあり、「画像/jpeg」を詰めて、必要なファイルをアップロードできます - あなたは盲目的にそれを信頼しています
$_FILES[...]['filename']
値は正しく設定されます - 繰り返しますが、この値は完全にユーザーの制御下にあり、彼らが望むなら「hackme.php」を詰め込むことができます - ファイルをPhotoAlbumディレクトリに盲目的に書き込みますが、ユーザーがサプリしたファイル名にパスデータが含まれているかどうかを確認しないでください
したがって、誰かが次のファイルをアップロードした場合はどうなりますか:
$_FILES['uploadfile0']['type'] = 'image/gif';
$_FILES['uploadfile0']['filename'] = '../pwn_me.php';
ユーザーが提供するPHPスクリプトを喜んで配置しました あなたのウェブサーバーに そして、彼らは今、彼らが望む何でもすることができます。
それに加えて、データベースは同じデータをクエリに盲目的に挿入し、SQLインジェクション攻撃に対して大きく開いています。同様に、ファイルを移動するまでファイル名の衝突をチェックしません。したがって、誰かが悪意のあるスクリプトをアップロードすることができましたが、その特定のファイル名に対して一度だけ行うことができます。おめでとうございます、あなたはあなたのサーバーにバージョンされた攻撃を実装しました。 「pwn_me.php "、" pwn_me2.php "、" pwn_me3.php "、" my_little_pwnme.php "などがあります。