2017-01-31 12 views
1

私はプラグイン(slimimagecropper.com FYI)を通じてユーザーがアップロードする画像を保存するためにfile_put_contents($path, $image);を使用しています。file_put_contents()で保存した画像を検証するにはどうすればよいですか?

私はXSSを心配しています。 で保存する前に、XSSの$imageをチェックする最良の方法は何ですか?

+0

ファイルタイプがイメージであるかどうかを確認し、イメージ拡張子で保存する必要があります。人々は '$ image'をどのようにアップロードしますか? – Antony

+0

ありがとうございます。彼らはプラグイン(slimimagecropper.com)を使ってアップロードします。プラグインは$ _FILES配列を見て画像を取得します。私が見る限り、このプラグインはXSSチェックサーバー側を行いません。なぜ、 'file_put_contents()'を書き込むプラグインコードを変更したいのですか? – Nadine

答えて

1

参考:PHP Validating the File Upload

コンテンツが画像であれば、あなたは検証する必要があります検証するには、次のように.PHP

  • そのMIMEタイプとしてリモートファイルのアップロードを防ぐため

    • その延長

      ファイルの種類を確認するための追加チェック
    • その内容
      防止アップロード画像とテキストと同様の

    拡張子とMIMEタイプ検証する(基準から引用)このコードを使用してみてください:

    $allowedExts = array("gif", "jpeg", "jpg", "png"); 
    $extension = end(explode(".", $_FILES["file"]["name"])); 
    if ((($_FILES["file"]["type"] == "image/gif") 
    || ($_FILES["file"]["type"] == "image/jpeg") 
    || ($_FILES["file"]["type"] == "image/jpg") 
    || ($_FILES["file"]["type"] == "image/png")) 
    && ($_FILES["file"]["size"] < 20000) 
    && in_array($extension, $allowedExts)) 
    

    、その内容を検証するためにこのコードを(基準から撮影

    $file = $_FILES['file']['tmp_name']; 
    if (file_exists($file)) { 
        $imagesizedata = getimagesize($file); 
        if ($imagesizedata === FALSE) { 
         //not image 
        } else { 
         //image 
        } 
    } 
    
  • 2

    ユーザーのアップロードをサニタイズする方法はいくつかあります。 $_FILESのすべては操作できますので、それを信用しないでくださいにすべて

    ファイル名:

    は、ユーザーがあなたに与えられたファイル名を信頼ことはありません - 常に異なると消毒入力として保存します。 image.jpg.php - >uniquestring_programatically_generated.jpg

    Getimagesize:

    それは実際のイメージだし、それは大きさを持って検証する方法getimagesize($filename)を使用してください。

    関連する問題