RSSWordPress.orgjavascriptスキームとイベントハンドラは二度刺すTweet新入生の方とそれを指導される方、新社会人の方とそれを指導される方お疲れ様です。今回はjavascriptスキームとイベントハンドラについて書こうかと思います。以下のように[userinput]にユーザが任意の文字列を入力出来る時、問題があります。ME</i>例えば攻撃者が以下のような文字列を[userinput]に対し入力した場合alertが2度実行されます。ME</i>どうすれば対策出来るでしょうか。ここでは、攻撃者が入力したシングルクォートに「\」(バックスラッシュ)、「\」に「\」を付けるという対策を行ってみます。「one\’);alert(\’two」という文字列を追加すると結果として以下の様なHTMLタグが生成され、alertは1度しか実行されません。ME</i>ではこれで本当に安全でしょうか。攻撃者は「one&apos;);alert(&#x27;two」という文字列を入力します。結果として以下の様なHTMLが生成されます。ME</i>これをクリックするとどうなるでしょうか。alertが2度実行されます。イベントハンドラ内では「&apos;」もしくは「&#x27;」を「’」(シングルクォート)の代わりに使用することが出来ます。ユーザが入力した「&」を&amp;に置き換えてやることで対策は可能です。次に見たいのはjavascriptスキームです。以下のように[userinput]にユーザが任意の文字列を入力出来る時、問題があります。ME</a>例えば攻撃者が以下のような文字列を[userinput]に対し入力した場合alertが2度実行されます。「one’);alert(‘two」ここで「’」を「\’」、「\」を「\\」、「&」を「&amp;」に置き換えるという対策をしてみましょう。これで完璧でしょうか?答えはNOです。攻撃者が以下のような文字列を[userinput]に入力します。結果として以下の様なタグが生成されます。ME</a>するとどうなるでしょうか。何とalertが2度実行されてしまいます。javascriptスキーム内では「&apos;」や「&#x27;」の他に「%27」を使用することが出来ます。いう変なコードを書く事も出来ます。ME</a>また蛇足ですがjavascriptスキームはHTMLエンティティを使って記述することが出来ます。いう書き方も出来るわけですね。素人目には何が実行されるのか意味不明です。この辺に関しては過去の記事を参考にして頂ければと思います。ME</a>ちなみに上のよくわからないHTMLタグは以下のタグと同じものです。ME</a>いかがでしたでしょうか。ユーザの入力をイベントハンドラやjavascriptスキームの中で使用しているサイトはたとえエスケープ処理を行っていても気をつけたほうがいいかもしれませんね。