1

こんにちは、私は @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
4

3 に答える 3

2

おそらく、php.ini 構成ファイル (post_max_size設定) で最大 POST サイズを変更する必要があります。

于 2010-11-15T04:23:10.677 に答える
0

警告と同じように:アップロード処理スクリプトを使用すると、サーバーを完全に破壊するのは非常に簡単になります。

  1. 値が正しく設定されていることを盲目的に信頼します。$_FILES[...]['type']この値は完全にユーザーの制御下にあり、ユーザーは「image / jpeg」に詰め込んで、必要な種類のファイルをアップロードできます。
  2. 値が正しく設定されていることを盲目的に信頼し$_FILES[...]['filename']ます。この場合も、この値は完全にユーザーの制御下にあり、必要に応じて「hackme.php」に詰め込むことができます。
  3. やみくもにファイルをフォトアルバムディレクトリに書き込みますが、ユーザーが指定したファイル名にパスデータが含まれているかどうかは確認しないでください

したがって、誰かが次のファイルをアップロードするとどうなりますか。

$_FILES['uploadfile0']['type'] = 'image/gif';
$_FILES['uploadfile0']['filename'] = '../pwn_me.php';

これで、ユーザー提供のPHPスクリプトをWebサーバーに配置でき、ユーザーは好きなことを実行できるようになりました。

その上、データベースクエリは同じデータを盲目的にクエリに挿入するため、SQLインジェクション攻撃にさらされる可能性が高くなります。また、ファイルを移動するまで、ファイル名の衝突をチェックしません。したがって、誰かが悪意のあるスクリプトをアップロードする可能性がありますが、その特定のファイル名に対して1回だけアップロードします。おめでとうございます。サーバーにバージョン管理された攻撃を実装しました。「pwn_me.php」、「pwn_me2.php」、「pwn_me3.php」、「my_little_pwnme.php」などがあります。

于 2010-11-15T17:09:08.917 に答える
0

コマンドphpinfo()を使用して、構成をダンプできます。おそらく、他の人が述べているように、アップロード サイズと実行時間を増やす必要があります。

これらは.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
于 2010-11-15T04:43:26.807 に答える