XSS(クロスサイト・スクリプティング)対策にはエスケープ


HTMLやJavaScriptの生成処理に不備があると発生する脆弱性として、XSS(クロスサイト・スクリプティング)が知られている。

WebアプリケーションにXSSが潜んでいると、次のような状況が起こりえる。

1:ユーザーのブラウザ上で不正スクリプトが実行され、ユーザーのクッキーが盗まれた結果、成りすまし被害にあう。

2:Webサイト上に偽の入力フォームが表示され、利用者の個人情報が盗まれる。

XSSが発生する原因と対策は、次のようなものになる。

原因1:HTML生成の際に特殊記号(「<」や「”」)にエスケープ処理を施していない場合、入力された文字列がスクリプトとして実行されてしまう。

対策1:要素内容は「<」と「&」をエスケープする。

対策2:属性値については、「<」と「”」と「&」を「”」で囲みエスケープする。

対策3: header関数を用いて、HTTPレスポンスに文字エンコーディングを明示する。

原因2:URLを属性値とするhref,img,frame,srcにおいて、URLを外部から変更できる場合、URLに「javascript:Javascript式」を入力することでスクリプトとして実行されてしまう。

対策1:http:, https:, /, で始まるURLのみを許可する。

対策2:許可されたURLは、属性値としてHTMLエスケープする。

原因3:JavaScriptの動的生成において、JavaScriptの文字列リテラルにエスケープ処理を施していない場合、入力された文字列がスクリプトとして実行されてしまう。

対策1:文字エンコーディングがUTF-8の場合、script要素の外側でhiddenパラメータを定義して、JavaScript側から参照する。

対策2-a:文字エンコーディングがUTF-8以外の場合、JavaScriptの文うち「”」「’」「」「改行」をエスケープする。

対策2-b:script要素内の場合は、対策2-aの結果に「</」が出現しないように処理する。script要素外の場合は、対策2-aの結果を文字参照によりHTMLエスケープした後、「”」で囲む。

 


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です