1

ファイルがデータベースにアップロードされない理由がわかりません。ファイルがアップロードされない理由をこの方法で確認しようとしています。この方法は多くの時間使用されます。毎回うまくいきました。間違いがあれば訂正してください。

<?php
//database connection successfully worked.
  $manu = $_POST['manu'];    
if(isset($_POST['img_submit']))
{if($_FILES['file']['name']<>"")
    {$file =time().'_'.$_FILES['file']['name'];
        if (!copy($_FILES['file']['tmp_name'],"file/".$manu))
        {$message = "Invalid File type.Upload only JPEG and GIF files";}            
        if(move_uploaded_file($_FILES['file']['tmp_name'], $manu)) {$msg2 = "The file ".  basename( $_FILES['file']['name']). " has been uploaded";} 
            else{$msg3 = "There was an error uploading the file, please try again!";} }
    echo $query = "insert into upload_image (upload_img) values('".$manu."')";
    mysql_query($query) or die (mysql_error());

}?>    

<form name="form" action="" method="post"  enctype="multipart/form-data">
<table width="100%" border="0" cellspacing="4" cellpadding="5">
  <tr><td align="center" colspan="2">&nbsp;<b>Upload Image</b></td></tr>
   <tr>
    <th width="50%">&nbsp;Image Url :</th>
    <td width="50%">&nbsp;<input type="file" name="manu" value="" /></td>
  </tr>
  <tr><td align="center" colspan="2"><input type="submit" name="img_submit" value="Upload Image" /></td></tr></table></form>
4

2 に答える 2

4

したがって、このコードをサーバーに配置したくありません。

<?php
    //database connection successfully worked.
    $manu = $_POST['manu'];    
    ...
    if(move_uploaded_file($_FILES['file']['tmp_name'], $manu)

これは基本的にブラウザを制御できる場合(私が持っている場合)、偽のMIMEタイプと選択したフルパスを含むファイルを送信でき$_POST['manu']、サーバーはこのファイルを任意のフォルダに保存することを意味します。チェックせずにへの書き込みアクセス権があります。

サーバーコードが見つける可能性のある場所evil_haxxor_skr1pt.phpのMIMEタイプでアップロードし、私に代わって実行するとします...image/jpeg

于 2012-08-27T21:53:29.327 に答える
2

まず、copy()関数とmove_uploaded_file()を使用します。copy()は使用しないでください。それは大きなセキュリティ違反です!

DBに保存する場合は、file_get_contents()$manuのようなものを使用してファイルのすべてのコンテンツを取得する必要があります。次に、変数で行ったように、そのデータをDBに直接使用します。入力をフィルタリングすることを忘れないでください。ちなみに、mysql_ *関数は使用せず、mysqli_*関数を使用してください。mysql_*はすでに古すぎて古くなっています。

于 2012-08-27T21:51:11.560 に答える