- ベストアンサー
CGIでアップロード
今日は。 CGI(PERL)やってます。 サーバ上に設定されたMIMEタイプをクライアントからアップロードすることを考えています。 このときにセキュリティ上、気をつけなければならないことは?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
サーバのクオータ管理が正しく働くのであれば気にしなくてもいいのかもしれませんが、 >大容量のテキストファイルの類をアップロードしてきた場合、全部サーバ側に来ないと容量のチェックは無理なように見えますが。 Perl CGI側でできそうなことはsysread関数で長さを制限しながら読み込み、制限を超えるとdieでスクリプトを終了させてしまうという手が考えられます。また、スクリプト起動時にディスク容量を確認(サーバによって方法は異なると思います)する動作もできると思います。 セキュリティ面ではありませんが、日本語ファイル名のファイルが転送されてきたとき、Unix上でEUCコードの日本語ファイル名に変換できないことがあります。半角かな禁止や文字化けへの対処は大変面倒なので、アルファベット+数字だけのファイル名でのアップロードに制限するといいのですが、なかなか守ってくれません。このサイトのように事前に文字をチェックするシステムを導入ればいいのではないかと思っているのですが、いまだに実現できていません。
その他の回答 (2)
- nta
- ベストアンサー率78% (1525/1942)
要はアップロード時にうまくサイズチェックできるようにするということではあるのですが、ブラウザのアップロード機能でいきなり送信させることは危ないとかんがえています。サーバ側からはパソコン上にあるファイルサイズをチェックするということもできませんし、相手がプログラムでプレーンテキストのデータを連続送信してきた場合には途中でも受信を拒否するようにcgiのプログラムを書くか、JavaScriptやCookieなどを利用して送信元の事前チェックを厳しくする必要があります。
お礼
大容量のテキストファイルの類をアップロードしてきた場合、全部サーバ側に来ないと容量のチェックは無理なように見えますが。 使用しているサーバはレンタルしていて、 「 なお、CGI に関する制限としましては、 メール&ウェブではお客様が設置したCGIプログラムが消費する サーバリソースの消費量を監視しており、サーバの既定の値を超えた 場合、自動的に該当プログラムのプロセスを停止する措置を行います 」 ということだそうです。 後は、プロキシ―経由を禁止して、おかしいとみなしたプロバイダーを禁止しようかと考えています。
- nta
- ベストアンサー率78% (1525/1942)
よくわからないのですが、サーバはhttpサーバだと思いますが、MIMEタイプはPOSTまたはGETメソッドでクライアント側からサーバにアップロードするときに、形式を指定する時に使うと思われますが、「サーバ上に指定されたMIMEタイプをクライアントからアップロードする」という動作はどういう状況を念頭に入れているのでしょうか。 ファイルのアップロードはあらゆるファイルタイプのデータを転送できます。サーバでのファイルの実行が禁止されていれば、サーバでのウイルスの実行などは制限されます。しかし、大量のデータを送りつけてディスクをパンクさせたり、サーバに保存させたウイルスやブラクラをダウンロードさせて他のクライアントに被害を与えることは可能です。ユーザ認証とファイルサイズ制限は最低でも必要です。サーバ上で定期的にウイルスチェッカによるスキャンも必要でしょう。
お礼
回答、ありがとうございます。 ファイルのサイズ制限は、CGIでする予定です。 クライアントでのウィルスチェックをさせるつもりですが、当てにならないので、サーバ側でブロックすることにしてます。 MIMEタイプは、必要なものだけ許可(文書用ファイルが想定)の形。
お礼
レンタルサーバ上:irixにて sysread(STDIN, $IN, 制限値) を実行すると、制限値を超えるとだめになるようです。 read(STDIN, $IN, 丸ごとサイズ) を実行すると、一応うまくいくようです。
補足
お礼の文章を訂正します。 制限値を越えるとだめではなくて サーバのプロセス監視によって、このプロセスが止められたようです。