- ベストアンサー
eval()の危険性の具体例を教えてくれませんか?
javascriptのeval()の危険性についての質問です。 下のようなページを公開したとして <html> <script> function execstr(str){eval("(" + str + ")");} </script> <body> <form action="#"> <input type="text" id="code"> <input type="button" onclick="javascript:execstr(this.form.code.value);" /> </form> </body> </html> 「ユーザーが入力したテキストをそのままeval()で評価実行するのは、悪意のあるコードがそのまま実行されてしまうので危険である」とされています。この危険な悪意のあるコードが、どんな危険性をもつのかが具体的にイメージが掴めないのです。 javascriptはクライアント側のブラウザーで実行されているものであり、そもそもローカルなリソースにはアクセス出来ないし、ましてサーバー側に影響を及ぼすようなjavascriptとはどんなものなのでしょうか? クッキーを盗むといっても、本人のクッキーを盗んでも仕方ないし、他人のクッキーはみれないでしょう。XMLHttpRequestで他のサイトにポストするコードを実行されても、サーバー側で困る事はないと思うのですが。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (7)
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
回答No.8
- think49
- ベストアンサー率59% (285/482)
回答No.7
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
回答No.6
- think49
- ベストアンサー率59% (285/482)
回答No.5
- think49
- ベストアンサー率59% (285/482)
回答No.4
- think49
- ベストアンサー率59% (285/482)
回答No.2
noname#94983
回答No.1
お礼
詳細な解説ありがとうございました。 じっくり内容を理解してみます。 考えてばかりいても、楽しくないので、まずはPCのxampで公開せずに作っていろいろ試してみようと思います。
補足
javascriptで投稿内容を事前にeval()しても、そのページ自体を書き換えられる危険性はなさそうですね。要はPOSTされたコードを受け取るサーバー側のプログラムがしっかり対策すればよさそうですね。 まさに、ここ「教えて!GOO」のページではいろんなスクリプトコードやHTMLのコードまで投稿されてますが坂内に安全に表示されてますね(HTMLは時々バグってるみたい)。 作ろうと思ったページは、javascriptのソースを投稿してもらい、投稿したjavascriptのコードを送信する前に、そのページで、evalを使って事前にプレビュー実行も可能(無理なコードがあるのも分かってます)とさせ、登録ボタンを押すとサーバー側のphpに送信します。 サーバー側のPHPはPOSTされたコードを、$_POSTからローカル変数に格納する際にエスケープして受け取りaddslashes()してテキストデータとして保存します。掲示版の内容は保存されたテキストデータより<xml>を作成します。投稿されたスクリプトを取り出し加工して、 <description> <![CDATA[ スクリプトの内容 ]]> </description> として出力します。 掲示板のページは、ロード時、リロード時にサーバーに掲示板内容のXMLを ajaxで取りにいって、javascriptでパースしdom関数で編集して、<iframe> の中に表示させます。--といった掲示板を考えたのです。 回答番号:No.2さん指摘のDos攻撃のリスクはeval()つかって無くてもありえる話しなのでjavascriptのeval()の問題点とはいえないかも知れません。