2012-02-13 10 views
1

私はRad Uploadと呼ばれるJAVAアプレットを使用しています - http://www.radinks.com/upload/ APPLETがクラッシュすると内部サーバーエラーが発生します。内部サーバーエラー画像のアップロードmod_php VS cgi

ApacheとPHPの両方を調整して、大きな画像をアップロードしました。これが問題です。 PHP自体に問題があるようです。アップロードスクリプトの複製を別のサーバで作成しました。 1つは動作し、もう1つは動作しません。

エラー・ログがありませんホスティング会社によると PHPバージョン5.2.5 CGI

として PHPバージョン5.2.13実行を動作していないのApache

として実行されているものを作品1何が問題なのか彼らは画像が投稿されていることを知ることができ、Upload Scriptingを実行する時間が来ると、このスクリプトにアクセスする前にクラッシュします。

ここではアップロードスクリプトは問題ではありませんが、
これは、使用されている最終的なアップロードスクリプトではありませんのでご注意ください。これはテスト用のストリップダウンバージョンです。これを削除しても機能しません。私たちは、PHPをまったく持たない空のアップロードスクリプトを使用するという点まで行ってきました。それでも、生成されているログで内部サーバーエラーが発生します。

session_start(); 
$photo = $_FILES['userfile']; 
$count = count($photo['name']); 
if (!is_dir('./'.$_SESSION['order'])) { 
    mkdir('./'.$_SESSION['order']); 
} 
for ($i=0; $i < $count; $i++) { 
    move_uploaded_file($photo['tmp_name'][$i], './'.$_SESSION['order']/'.$photo['name'][$i]); 
} 

ウェブサイトが別の新しいサーバーに移動され、同じ問題が発生しました。 CGIとして動作するPHPと関係があると私は信じています。これが両方のシナリオの唯一の違いです。

これは意味があり、これを見た人はいますか?アップロードが実際にあなたのコードに成功した場合はチェックしていない

+0

+1 @Marc Bさんのコメント。私は本当にあなたがここで有給のクローズドソース製品を使用している理由を理解していません。このソリューションは攻撃のために熟しています。誰かがこれを再設計してこれをアップロードリポジトリとして利用するのを防ぐ方法を教えてください。また、悪用を防ぐためにイメージをスクラブする必要があります。 – TerryE

+0

下記の私のコメントをお読みください。アップロードスクリプトについては忘れてください。これはスクリプトまたはサーバーかどうかを判断するために最低限に抑えられています。スクリプティングは空白でもなく、PHPもなく、同じ問題です。 – Tim

答えて

0

問題は解決されました。 PHPが正しくコンパイルされませんでした。私を新しいサーバーに移動させた後...バム!アップロードは動作します。

セキュリティに関して懸念している方には、ご意見ありがとうございます。はい、それはすべて戻されました。

2

:あなたのコードは、ファイル落書き攻撃に対して脆弱である

for ($i=0; $i < $count; $i++) { 
    if ($photo['error'][$i] === UPLOAD_ERR_OK) { 
     if (!move_uploaded_file($photo['tmp_name'][$i], './'.$_SESSION['order']/'.$photo['name'][$i])) { 
      echo "Unable to move file #$i to final destination"; 
     } 
    } else { 
     echo "Upload #$i failed with error code ", $photo['error'][$i]; 
    } 
} 

注意。ユーザーが提供している['name']部分を盲目的に使用しています。この部分にはファイルのパス情報が含まれています。悪意のあるユーザーがファイル名を../../../../../../../../etc/passwdに設定することはまったく簡単なことです。これにより、Webサーバープロセスが書き込みアクセス権を持つサーバー上のファイルを書き換えできます。

+0

上記のアップロードスクリプトは保護されています。それは、ストリップされたダウンバージョンです。私はPHPスクリプトを空白にするまで行った。アップロードスクリプトではありません。この段階に到達する前にエラーが生成されます。私はそれがスクリプティングではないことを上に書いたと確信しています。それは、mod_phpとcgiとして動作する1つのサーバに降りてくるようです。私たちはすべてをテストしました。 – Tim

+0

ファイルへの定期的な投稿(ファイルの入力を取り除いてデフォルトのenctypeを使用するなど)を何もしないとどうなりますか?他のPHPスクリプトは正常に動作しますか? –

+0

私は定期的な投稿と他のすべてのスクリプトの仕事をしています。私はまだそれがPHPスクリプトであるとは思わない。空のアップロードページとして試してみました。それはテストに基づいてこれに達する前にそれはストールします。 – Tim

関連する問題