0

サーバーへのファイル アップロード スクリプトのコードを取得することができました。現在、すべてのファイルを受け入れるのは、かなりばかげたコードです。つまり、スクリプトにアクセスするすべての人がファイルを即座にアップロードできます。

POST データを受け取り、リクエストを処理する現在の PHP コードは次のとおりです。

<?php
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir.basename($_FILES['userfile']['name']);

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))
{
    echo "OKAY";
}
else
{
    echo "NOT SO OKAY";
}
?>

世界中の人々が私のサーバーにファイルをアップロードするのを防ぐために、リクエストと共に MD5 ハッシュ キーを送信し、基本的にコードを "if($key == $serverkey)" で囲みます。

したがって、次のようになります。

<?php
if ($_POST['key'] == $serverkey)
{
    $uploaddir = '/var/www/uploads/';
    $uploadfile = $uploaddir.basename($_FILES['userfile']['name']);

    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))
    {
        echo "OKAY";
    }
    else
    {
        echo "NOT SO OKAY";
    }
}
else
{
    echo "WRONG KEY";
}
?>

私の問題は今...どうすれば正しい方法でリクエストにキーを追加できるので、後でファイルだけでなく「$_POST['key']」にアクセスできますか? キーが誤ってファイル データに適用されることは望ましくありません。

このファイルには、Qt で次のコードが追加されます。

data.append(QString("--" + bound + "\r\n").toLatin1());
data.append("Content-Disposition: form-data; name=\"" + url + "\"\r\n\r\n");
data.append(scriptName + "\r\n");
data.append("--" + bound + "\r\n");
data.append("Content-Disposition: form-data; name=\"" + inputName + "\"; filename=\"" + inf.fileName() + "\"\r\n");
data.append("Content-Type: application/octet-stream\r\n\r\n");
if (!file.open(QIODevice::ReadOnly)) return;
data.append(file.readAll());
data.append("\r\n");
data.append("--" + bound + "--\r\n");

ファイルはすでに境界に制限されていますか?

次のように別の行を追加するだけで、PHPは2つの違いを認識しますか?

data.append("&key=" + key);

「&」は必要ですか?私はグーグルでそれを見つけることができません...厳密にファイルのアップロードまたはPOST経由で送信されるキーのようないくつかの値がありますが、同じリクエストで両方が存在することはありません。ご協力ありがとうございました!

4

1 に答える 1

1

リクエストに応じて、回答としての私のコメント。

チェックし$_POSTているので、リクエストに追加の POST-Parameter を追加する必要があります。$_GETPHPスクリプトをチェックインし?key=md5stuffて、URLに追加することもできると思います。

于 2013-02-28T13:49:06.753 に答える