はてなダイアリーのヘルプg:hatenadiary:keyword:はてなダイアリーXSS対策に移動しました。
最新の情報はヘルプで提供しています。
はてなダイアリーでは、ユーザーの皆様に自由にHTMLタグやスタイルシートを入力して頂きながら、クッキー漏洩などのクロスサイトスクリプティング=XSS脆弱性の回避のため、以下の処理を行なっています。
- ヘッダ、フッタ、日記本文の表示時にHTMLを解析し、はてなダイアリー利用可能タグに定めるタグおよび属性のみを出力します。
- 利用可能タグに設定されていない属性は削除し、利用可能タグに設定されていないタグの場合には<script>といった文字列に変換します。
- href,src,cite,background 属性で外部 URL が参照される場合、URL が適切な文字で構成されているかチェックを行ないます。
- タグ内の属性値は、「<」を「<」に、といった変換を行ないます。
- スタイルシート内の「\69\6D\70\6F\72\74」といった文字参照を、EUC文字列に置換します。
- スタイルシート内に @i(mport)? (url)?(...)という指定がある場合、
- urlで指定されたCSSファイルの取得に成功し
- urlで指定されたファイルのcontent-typeが「text/css」の場合で
- import回数が10回以内の場合
には、そのファイルの内容をヘッダ内に挿入します。
なお、この機能ははてなアンテナで当初利用可能であった@import機能からの移行をスムーズに行うための措置であり、ページの表示速度も遅くなるため、利用されないことを推奨します。
- スタイルシート内の「\」文字で、その後に続く文字が「'」「"」「{」「}」「;」「:」「(」「)」「#」「A」「*」でないものを削除します。
- スタイルシートを解析し、「javascript」「vbscript」「@import」「cookie」「eval」「expression」「behavior」「behaviour」「binding」「include-source」「@i」「boundary」の文字列をその文字列が無くなるまで削除します
- スタイルシートを解析し、url(...)で指定された URL が適切な文字で構成されているかチェックを行ないます。
- スタイルシート内の「<」「>」を「<」「>」に変換します。
つまり、基本的な考え方として、HTMLタグは何も使えない状態から利用できるものを限定して定義し、スタイルシートについては、全ての記述の中から利用できない文字列を定義するという考え方です。
これは、悪意のある利用者によってcookieの値が漏洩し、なりすましなどの悪用が行なわれることを防ぐことが目的であり、安心してはてなをご利用頂けるための措置です。
一部制限のために不便をおかけしますが、ご了承ください。