• ベストアンサー

ファイルアップロード・ダウンロードのセキュリティ

ログインした任意の人が「ファイルアップロード」し、任意の人が「ダウンロード」するようなサイトを考えています。 セキュリティ的にはどこら辺に注意したら良いでしょうか? 思いつくのは、拡張子チェックですが、偽装されたらそれまで、なのでしょうか? ※アップロード・ダウンロード対象予定ファイルは、「php」「javascript」「html」「css」などです

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

>>ファイルはプログラムがあるドメインとは別のドメインからダウンロードできたほうが良いです >この部分を理解できなかったのですが、JavaScriptはアップロードしたファイルが置いているドメインのものとして実行されてしまうから、「何をされてもいいような中身が空の、この用途専用のドメイン」を用意して、ファイルアップロード先はそこへ指定し、ダウンロードもそこからした方が良い、ということでしょうか? 大方おっしゃるとおりです。 細かいところを修正すると、アップロードに別のドメインを用意する必要はありませんが、ダウンロードについてはダウンロード専用のドメインにしておいたほうが良いということです。 お分かりの通り、same origin policyを考慮してのことです。

re97
質問者

お礼

回答ありがとうございました。 大変参考になりましたー

その他の回答 (4)

  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.4

「php」「javascript」「html」「css」なら 掲示板のようにコピペでソースを投稿してもらってそれをコピペで貰う形でいいと思いますよ

re97
質問者

お礼

アドバイスありがとうございました。 確かにその通りなのですが、以前からこの辺がよく分からなかったので、質問してみましたー

回答No.3

アップロード、ダウンロードでアクセスできる範囲を制限しておくのは当たり前ですが、あとはクロスサイトスクリプティング脆弱性でしょう。 前者について、もっと具体的に説明すると、ユーザーが与えたpath名をそのまま使用しないことです。プログラムがあるところにアップロードできたらプログラムの改変は可能ですし、任意のファイルをダウンロードできたらサーバーの秘密の情報は全て筒抜けになります。 後者については、JavaScriptをアップロードされた場合、同一ドメイン原則の制限をすり抜けるので、コードはあなたのドメインのものとして実行されてしまいます。ファイルはプログラムがあるドメインとは別のドメインからダウンロードできたほうが良いです。また、ファイルをダウンロードするときに時刻と秘密の鍵から作ったチケットのようなものがないとダウンロードできないようにしておくのも良いでしょう。 サービスの信頼性という意味で言うと、DoS攻撃対策も必要です。ユーザーごとのファイルをアップロードできる容量、ダウンロード出来る容量、アクセスの頻度について制限を設けておいて、超えた場合は絞れるようにしたほうがよさそうです。 広い意味でセキュリティを捉えるなら、著作権の管理も必要ですね。 拡張子チェックというのはセキュリティ対策というより、アップロードできるファイルの種類を制限するためのものですよね?

re97
質問者

補足

回答ありがとうございました。 >ファイルはプログラムがあるドメインとは別のドメインからダウンロードできたほうが良いです この部分を理解できなかったのですが、JavaScriptはアップロードしたファイルが置いているドメインのものとして実行されてしまうから、「何をされてもいいような中身が空の、この用途専用のドメイン」を用意して、ファイルアップロード先はそこへ指定し、ダウンロードもそこからした方が良い、ということでしょうか?

回答No.2

アップロードされたphpファイルがサーバーで実行されれば、サイトの乗っ取りやファイル改ざん、メール送信なども自由にできます。 「http://アップロードしたファイルのURL」でファイルに直接アクセスできないようになっているか、 直接アクセスできても、サーバーサイドアプリケーションとして実行しないようになっていれば、 セキュリティー対策としては十分だと思います。

re97
質問者

お礼

回答ありがとうございましたー

  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.1

拡張子チェックより、PHP5.3 から標準実装されている Fileinfo を使ったほうがより正確です。 http://www.php.net/manual/ja/function.finfo-file.php 最も、「php」「javascript」「html」「css」などはすべて text/plain で返されるので、 あわせて拡張子チェックをするのもありですが。

re97
質問者

お礼

回答ありがとうございました。 >拡張子チェックより、PHP5.3 から標準実装されている Fileinfo を使ったほうがより正確です 初めて知りました。 勉強になりましたー

関連するQ&A