「覚え間違い」を教えてください!

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

A 回答 (5件)

>>ファイルはプログラムがあるドメインとは別のドメインからダウンロードできたほうが良いです


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

大方おっしゃるとおりです。
細かいところを修正すると、アップロードに別のドメインを用意する必要はありませんが、ダウンロードについてはダウンロード専用のドメインにしておいたほうが良いということです。

お分かりの通り、same origin policyを考慮してのことです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/02/06 19:02

「php」「javascript」「html」「css」なら


掲示板のようにコピペでソースを投稿してもらってそれをコピペで貰う形でいいと思いますよ
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/02/06 19:04

アップロード、ダウンロードでアクセスできる範囲を制限しておくのは当たり前ですが、あとはクロスサイトスクリプティング脆弱性でしょう。



前者について、もっと具体的に説明すると、ユーザーが与えたpath名をそのまま使用しないことです。プログラムがあるところにアップロードできたらプログラムの改変は可能ですし、任意のファイルをダウンロードできたらサーバーの秘密の情報は全て筒抜けになります。

後者については、JavaScriptをアップロードされた場合、同一ドメイン原則の制限をすり抜けるので、コードはあなたのドメインのものとして実行されてしまいます。ファイルはプログラムがあるドメインとは別のドメインからダウンロードできたほうが良いです。また、ファイルをダウンロードするときに時刻と秘密の鍵から作ったチケットのようなものがないとダウンロードできないようにしておくのも良いでしょう。

サービスの信頼性という意味で言うと、DoS攻撃対策も必要です。ユーザーごとのファイルをアップロードできる容量、ダウンロード出来る容量、アクセスの頻度について制限を設けておいて、超えた場合は絞れるようにしたほうがよさそうです。

広い意味でセキュリティを捉えるなら、著作権の管理も必要ですね。

拡張子チェックというのはセキュリティ対策というより、アップロードできるファイルの種類を制限するためのものですよね?

この回答への補足

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

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

補足日時:2013/02/03 12:13
    • good
    • 0

アップロードされたphpファイルがサーバーで実行されれば、サイトの乗っ取りやファイル改ざん、メール送信なども自由にできます。



「http://アップロードしたファイルのURL」でファイルに直接アクセスできないようになっているか、
直接アクセスできても、サーバーサイドアプリケーションとして実行しないようになっていれば、
セキュリティー対策としては十分だと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/02/03 12:07

拡張子チェックより、PHP5.3 から標準実装されている Fileinfo を使ったほうがより正確です。



http://www.php.net/manual/ja/function.finfo-file …

最も、「php」「javascript」「html」「css」などはすべて text/plain で返されるので、
あわせて拡張子チェックをするのもありですが。
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2013/02/03 12:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報