1

作成中の Web ページの画像処理をセットアップしようとしていますが、move_uploaded_file() を正しく動作させることができません... 次のエラーが発生し続けます:

Warning: move_uploaded_file(/htdocs/PHP/Pictures/picture.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in /opt/lampp/htdocs/PHP/useredit.php on line 17

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpY0KKxH' to '/htdocs/PHP/Pictures/picture.jpg' in /opt/lampp/htdocs/PHP/useredit.php on line 17

私のコードは次のようになります。

if(isset($_FILES['image_file']))
{
    $img_tmp_name = $_FILES['image_file']['name'];
    $img_dir = "/htdocs/PHP/Pictures/";
    $img_name = $img_dir . $img_tmp_name;
    if(move_uploaded_file($_FILES['image_file']['tmp_name'],$img_name))
    {
        list($width,$height,$type,$attr) = getimagesize($img_name);
        switch($type)
        {
            case 1:
                $ext = ".gif";
                break;
            case 2:
                $ext = ".jpg";
                break;
            case 3:
                $ext = ".png";
                break;
            default:
                echo "Image format not accepted";
        }
        $query = "UPDATE profile_pic SET img_path=$img_name WHERE uid='$uid'";
        $img_id = mysql_insert_id();
        $new_img_name = $img_dir . $img_id . $ext;
        rename($img_name, $new_img_name);
    }
}
if(mysql_query($query)or die('Error: ' . mysql_error()))
{
    header("Refresh:0; url='control.php'");
}

フォルダー PHP/Pictures が存在します。これを修正するにはどうすればよいですか?

4

2 に答える 2

0

このコードには、セキュリティ上およびロジスティクス上の重大な問題がいくつかあります。

a) アップロードが成功したかどうかを確認せず、成功したかのように続行します。アップロードが成功する方法は 1 つだけですが、アップロードが失敗する理由は多すぎます。

if ($_FILES['image_file']['error'] !== UPLOAD_ERR_OK) {
    die("Upload failed with error code {$_FILES['image_file']['error']}");
}

b)サーバーに保存するパスでユーザーが提供したファイル名を使用しています。悪意のあるユーザーは、そのファイル名にパス データを埋め込み、サーバー上の任意の場所を指定できます。例えば

$_FILES['image_file']['name'] = '../../../../../../etc/passwd';
于 2012-08-15T18:43:29.057 に答える
0

$img_dir には、ルート フォルダーからではなく、現在のファイルに対する相対パスが含まれている必要があります。

現在のディレクトリに upload_file.php (コード) と PHP/Pictures/ のようなフォルダー階層が含まれている場合

それから$img_dir="/PHP/Pictures/";

于 2012-08-15T19:53:54.513 に答える