0

次のスクリプトを使用して JPG ファイルをトリミングしようとしています。

if (isset($_POST['crop_attempt'])) {

    echo($_POST['path']);

    $source_img = imagecreatefromjpeg($_POST['path']);
    $dest_img = imagecreatetruecolor($_POST['crop_w'], $_POST['crop_h']);

    imagecopy(

        $dest_img,
        $source_img,
        0,
        0,
        $_POST['crop_l'],
        $_POST['crop_t'],
        $_POST['crop_w'],
        $_POST['crop_h']

    );

    imagejpeg($dest_img, $_POST['path']);

    imagedestroy($dest_img);

    imagedestroy($source_img);
}

次の Javascript オブジェクト内の $_POST 変数を ajax 経由で送信しています。

var db_data = {
        left        :   db.offset().left - img_pos.left * ratio,
        top         :   db.offset().top - img_pos.top * ratio,
        width       :   db.width() * ratio,
        height      :   db.height() * ratio,
        crop_attempt:   true,
        path        :   $('._jsImageToCrop').attr('src')
    };

値はすべて通過し、PHP スクリプト内からそれらをエコーアウトしました。問題は imagecreatefromjpeg() 関数に関係していると思います。GD ライブラリの経験がもう少しある人は助けてもらえますか?

ありがとう。

4

1 に答える 1

0

PHP が AJAX 呼び出しから何を取得するかを考えてみましょう。srcこれはクライアント側要素の属性で、 のようなもの/some/subdir/on/your/site/kittens.jpgです。その値を に直接送信すると、存在しないサーバーimagecreatefromjpeg()が検索さ/some/subdir/....れます。サイトの DOCUMENT_ROOT が欠落しているため、実際のパスは になります/path/to/your/site/doc/root/some/subdir/....

このようなファイルシステム操作では、外部データを決して使用しないでください。単純に imagecreatefromjpeg() に渡すだけですが、ユーザーが完全なパスを直接提供できるため、まだ安全ではありません。つまり、パスを知っているサーバー上の任意の画像をロードできます。

于 2013-10-08T19:59:51.287 に答える