- ベストアンサー
ファイルアップロード・ダウンロードのセキュリティ
ログインした任意の人が「ファイルアップロード」し、任意の人が「ダウンロード」するようなサイトを考えています。 セキュリティ的にはどこら辺に注意したら良いでしょうか? 思いつくのは、拡張子チェックですが、偽装されたらそれまで、なのでしょうか? ※アップロード・ダウンロード対象予定ファイルは、「php」「javascript」「html」「css」などです
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>>ファイルはプログラムがあるドメインとは別のドメインからダウンロードできたほうが良いです >この部分を理解できなかったのですが、JavaScriptはアップロードしたファイルが置いているドメインのものとして実行されてしまうから、「何をされてもいいような中身が空の、この用途専用のドメイン」を用意して、ファイルアップロード先はそこへ指定し、ダウンロードもそこからした方が良い、ということでしょうか? 大方おっしゃるとおりです。 細かいところを修正すると、アップロードに別のドメインを用意する必要はありませんが、ダウンロードについてはダウンロード専用のドメインにしておいたほうが良いということです。 お分かりの通り、same origin policyを考慮してのことです。
その他の回答 (4)
- b0a0a
- ベストアンサー率49% (156/313)
「php」「javascript」「html」「css」なら 掲示板のようにコピペでソースを投稿してもらってそれをコピペで貰う形でいいと思いますよ
お礼
アドバイスありがとうございました。 確かにその通りなのですが、以前からこの辺がよく分からなかったので、質問してみましたー
- hanabutako
- ベストアンサー率54% (492/895)
アップロード、ダウンロードでアクセスできる範囲を制限しておくのは当たり前ですが、あとはクロスサイトスクリプティング脆弱性でしょう。 前者について、もっと具体的に説明すると、ユーザーが与えたpath名をそのまま使用しないことです。プログラムがあるところにアップロードできたらプログラムの改変は可能ですし、任意のファイルをダウンロードできたらサーバーの秘密の情報は全て筒抜けになります。 後者については、JavaScriptをアップロードされた場合、同一ドメイン原則の制限をすり抜けるので、コードはあなたのドメインのものとして実行されてしまいます。ファイルはプログラムがあるドメインとは別のドメインからダウンロードできたほうが良いです。また、ファイルをダウンロードするときに時刻と秘密の鍵から作ったチケットのようなものがないとダウンロードできないようにしておくのも良いでしょう。 サービスの信頼性という意味で言うと、DoS攻撃対策も必要です。ユーザーごとのファイルをアップロードできる容量、ダウンロード出来る容量、アクセスの頻度について制限を設けておいて、超えた場合は絞れるようにしたほうがよさそうです。 広い意味でセキュリティを捉えるなら、著作権の管理も必要ですね。 拡張子チェックというのはセキュリティ対策というより、アップロードできるファイルの種類を制限するためのものですよね?
補足
回答ありがとうございました。 >ファイルはプログラムがあるドメインとは別のドメインからダウンロードできたほうが良いです この部分を理解できなかったのですが、JavaScriptはアップロードしたファイルが置いているドメインのものとして実行されてしまうから、「何をされてもいいような中身が空の、この用途専用のドメイン」を用意して、ファイルアップロード先はそこへ指定し、ダウンロードもそこからした方が良い、ということでしょうか?
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
アップロードされたphpファイルがサーバーで実行されれば、サイトの乗っ取りやファイル改ざん、メール送信なども自由にできます。 「http://アップロードしたファイルのURL」でファイルに直接アクセスできないようになっているか、 直接アクセスできても、サーバーサイドアプリケーションとして実行しないようになっていれば、 セキュリティー対策としては十分だと思います。
お礼
回答ありがとうございましたー
- yuu_x
- ベストアンサー率52% (106/202)
拡張子チェックより、PHP5.3 から標準実装されている Fileinfo を使ったほうがより正確です。 http://www.php.net/manual/ja/function.finfo-file.php 最も、「php」「javascript」「html」「css」などはすべて text/plain で返されるので、 あわせて拡張子チェックをするのもありですが。
お礼
回答ありがとうございました。 >拡張子チェックより、PHP5.3 から標準実装されている Fileinfo を使ったほうがより正確です 初めて知りました。 勉強になりましたー
お礼
回答ありがとうございました。 大変参考になりましたー