hoshikuzu|star_dustさん、こんにちは。初投稿ありがとうございます。
さて、あまり堅いことは言いたくないのですが、このメーリングリストで扱い話題は以下のように、「体系的に学ぶ…」の記述に関する質問などに限らせてい
ただいております。
>このサイトでは、書籍「体系的に学ぶ 安全なWebアプリケーションの作り方」
>の記述内容やVMの動かし方に関する質問に限らせていただきます。
hoshikuzu|star_dustさんの投稿は、現在のままでは上記ガイドラインに違反しておりますが、以下のように、少し質問を変更すれば、こ
のメーリングリストで扱えるようになります。
本書P112以降では、JavaScriptの文字列リテラル生成方法として、以下の2種類を推奨しています。これ以外のリテラル生成方法についての質
問です…【以下略】
◆ Unicodeエスケープによる対策
◆ script要素の外部でパラメータを定義して、JavaScriptから参照する方法
前者は、英数字(および「-」と「.」)以外の文字を全てUnicodeエスケープ(\uXXXX)するという方法です。いわゆる過剰エスケープの一
種ですね。後者は、JavaScriptの文字列リテラルを動的生成せず、hiddenパラメータなどで定義して、JavaScriptから参照する方
法です。IPAの「安全なウェブサイトの作り方」はこちらを推奨しています。
私は元々過剰エスケープという奴が嫌いでして、その理由は「過剰」にすることで安全性が増すことの根拠が曖昧だからです。しかし、文字コードの問題
や、hoshikuzu|star_dustさんも指摘されているscript要素の終了に対する配慮を考えていくと煩雑になること、Unicodeに
よるエスケープが単純明快なルールで記述できるという理由から、JavaScriptの文字列リテラルに限っては過剰エスケープを(しぶしぶ)よしとし
ています。
hoshikuzu|star_dustさんのご質問ですが、
>私の場合、スラッシュを【も】エスケープして、"\/" をしてしまうので、"</" は、"<\/"としています。
>なにかまずいですかね?
これはミクロで見れば問題ありませんが、それでオッケーかというと、不安があるということですね。他の処理が全部正しければ問題ないと思いますが、U
+00A5が文字コード変換の結果 0x5C に変換されるような環境だと脆弱性になります。そのような例は、http://
www.slideshare.net/ockeghem/ss-5620584 のデモ6(スライド33から)に紹介しています。このケースに対して
は、自然な対策をとることができず、アドホックなことをやるくらいなら、英数字以外を\uXXXXでエスケープしてしまったほうがまだマシと思ってしま
うのですね。
>また、こんな方法があるよ、という別解があれば、ご教示願いたく、よろしくお願い申し上げます。
これについては、本書記載の方法を参照ください。
On 3月7日, 午前11:23, hoshikuzu stardust <
st4rd...@gmail.com> wrote:
> こんにちは。hoshikuzu|star_dustと申します。サポートMLに投稿してみたいと思います。
> 表題は『HTMLのscript要素の中身に於いて動的に生成した文字列のエスケープについて』ですが、意図しているのは以下のようなことです。
【後略】