セッション管理の 不要 な アプリケーション xss対策 39

JAC starts its overseas discovery journey in Beijing Auto Show
April 27, 2018

セッション管理の 不要 な アプリケーション xss対策 39

xss対策1で説明したエスケープ処理だけでは、クロスサイトスクリプティング(xss)対策は不十分です。その理由はutf-7によるxss攻撃があるからです。utf-7によるxss攻撃とは文字コードを指定していないサイトに対して、utf-7で書かれたスクリプトでxss攻撃を行うことを言います。 fjs.parentNode.insertBefore(js, fjs); その結果、信頼できるサーバからきた値のため、ブラウザは悪意のあるコードを実行してしまう。, Stored XSS Attacks、Reflected XSS Attacksともに、出力値をエスケープすることで防ぐことができる。, ユーザーの入力を、そのまま出力している場合、XSSの脆弱性にさらされている。 詳細は、Tutorial: Using Thymeleaf -Unescaped Text-を参照されたい。, 本例は、あくまで参考例として載せているだけなので、以下のような実装は、決して行わないこと。, Thymeleafでテキストを出力する方法にはth:text、th:utextの他にインライン記法が存在する。 この脆弱性を利用して行われる攻撃は、ユーザーの入力に対して動的にHTMLページを生成するアプリケーションが対象になります。※静的なページでは、問題は発生しません。, クロスサイトスクリプティングは、ユーザーがWebサイトにアクセスした際に、動的に表示されるページの脆弱性を利用した攻撃です。, 攻撃者は、動的ページでHTMLやJavascriptを利用している部分に悪意のある不正コードを埋め込みます。, Reflected XSSは、HTTPリクエスト中に含まれる攻撃コードがWebページ上で動作するタイプです。代表的な攻撃パターンとしては、検索フォームなど、Getリクエストのパラメータに含まれるscriptタグがWebページ上で動作するものがあります。, 特定のクエリに対してのみ動作するタイプなので、攻撃者は何らかの手段を用いて標的を特定のURLに誘導する必要があります。, ここでの「特定のURL」とは、アクセスすることで脆弱なページにPOSTリクエストを自動的に送信するページのURLを指します。, Stored/Persistent XSSは、HTTPリクエスト中に攻撃コードの記述があるかどうかに関係なく、あるWebページ上で持続的に動作するタイプです。, 例として、掲示板などの投稿中に含まれるscriptタグがそのまま動作するものがあります。その掲示板上では攻撃者が投稿したコードが動作しているため、攻撃者は標的がそのページにアクセスするのを待てばよいだけです。, そのため、Reflected XSS(反射型XSS)に比べると攻撃成功のハードルは低いと言えます。ただし、標的がWebページにアクセスしてくれないと目的を達成することはできないため、標的を対象のWebページに誘導する必要があります。, DOM Based XSSは、Webページに記述されている正規のscriptタグにより、動的にWebページを操作した結果、意図しないスクリプトをWebページに出力してしまうタイプです。, Webページに含まれる正規のスクリプトにより、動的にWebページを操作した結果、意図しないスクリプトをウェブページに出力してしまうタイプです。, 2013年後半から急増しています。Webブラウザなどユーザー側で実行される正規のスクリプト操作を利用した不正スクリプトの実行は、webページ出力処理(DOM操作)に問題があるために可能となる脆弱性と言えます。, 出典:IPAテクニカルウォッチ「DOM Based XSS」に関するレポート~JavaScriptでHTMLを操作するアプリは要注意!~, Webページを構成する要素として、Webページの本文やHTMLタグの属性値等に相当する全ての出力要素にエスケープ処理を行います。, エスケープ処理とは、HTMLやプログラミング言語を別の文字列に置き換えることです。 ブラウザにHTMLソースとして解釈させるよう出力するので、XSSの脆弱性が生じる。以下に例を示すが、 このような実装は決して行わないこと。, 出力結果をソースだけ確認するとエスケープできているように見える。 (adsbygoogle = window.adsbygoogle || []).push({}); 今回の例は「重要な情報(Cookieなど)を送信する」という悪意のあるスクリプトの場合です。悪意のあるスクリプトの内容により4の挙動は変わります。このようにクロスサイトスクリプティング(XSS)の対策をしていないサイトは、悪意のあるユーザーによってスクリプトを埋め込まれ、攻撃者の思いのままに埋め込まれたスクリプトが実行してしまう危険性があるのです。, 2010年7月4日に動画共有サイトの米YouTubeを狙った攻撃が発生しました。この攻撃ではクロスサイトスクリプティング(XSS)の脆弱性が悪用されました。, この影響でコメントが表示されなくなったり、画面に「ニュース速報:(歌手の)ジャスティン・ビーバーが交通事故で死亡」というデマがポップアップ表示されるなどの被害が広がりました。また他にも不正なポップアップが出たり、悪趣味なWebサイトにリダイレクトされたりするケースが相次いだと言われています。, 参考URL:https://www.itmedia.co.jp/enterprise/articles/1007/06/news018.html, Twitterでクロスサイトスクリプティング(XSS)の脆弱性を突いた不正スクリプトが感染を広げていると、ロシアのセキュリティ企業Kaspersky Labが2010年9月7日のブログで伝えました。同社によると、この手口には悪質なJavaScriptが使われていて、ユーザーが偽ツイートにだまされて不正なリンクをクリックすると、cookieが盗まれて外部のサーバに転送されてしまうというと伝えられています。, Twitterは7日までに、この攻撃に使われていた脆弱性を修正したと伝えられています。, 参考URL:https://www.itmedia.co.jp/news/articles/1009/08/news014.html, クロスサイトスクリプティング(XSS)の攻撃は様々な手段があります。本記事ではXSS攻撃でアラートを表示する攻撃例と悪意のあるサイトへリダイレクトさせる攻撃例を紹介します。, ますはアラートでデマ情報を表示させるXSSの攻撃例です。掲示板サイトなどの入力画面で以下のスクリプトを登録します。その後スクリプトを登録した画面を表示すると、アラートでデマ情報が表示されます。, 次に悪意のあるサイトへリダイレクトさせるXSSの攻撃例です。またクエリ文字列でCookie情報を付与しているので、悪意のあるサイトにリダイレクトするだけではなく、Cookie情報も送信しています。CookieでセッションIDを管理している場合は、セッションIDが悪意のある攻撃者に渡ってしまいます。, クロスサイトスクリプティング(XSS)の対策の基本はエスケープ処理です。エスケープ処理とはウェブページの表示に影響する特別な記号文字(「<」「>」「&」等)を、HTMLエンティティ(「<」「>」「&」等)に置換する方法の事を言います。, エスケープ処理を実施することで、悪意のある実行可能なスクリプトが無効(ただの文字列)となります。, ただし、システムによってはHTMLタグを有効にしたい場合があります。その場合は許可する要素のみHTMLタグを有効にし、それ以外のHTMLタグはエスケープ処理を行うなどの対応が必要です。, XSS対策1で説明したエスケープ処理だけでは、クロスサイトスクリプティング(XSS)対策は不十分です。その理由はUTF-7によるXSS攻撃があるからです。UTF-7によるXSS攻撃とは文字コードを指定していないサイトに対して、UTF-7で書かれたスクリプトでXSS攻撃を行うことを言います。, このようにUTF-7では「<」「>」「"」といったエスケープ対象文字を記述せずに、実行可能なスクリプトを書くことが出来るのです。, HTTPのレスポンスヘッダのContent-Typeフィールドには、「Content-Type: text/html;charset=UTF-8」のように、文字コード(charset)を指定できます。この指定を省略した場合、ブラウザは、文字コードを独自の方法で推定して、推定した文字コードにしたがって画面表示を処理します。, そのため文字コードを指定していないと、いくらXSS対策でエスケープ処理を実施していてもUTF-7で書かれたスクリプトによりXSS攻撃を受けてしまうのです。, HTTPレスポンスヘッダのContent-Typeフィールドには必ず文字コード(charset)を指定するようにしましょう。以下のいずれかを出力することでUTF-7のXSS攻撃は完全に防ぐことができます。, Cookieでセッション情報などの重要な情報を管理している場合は、CookieにあるHttpOnl属性を設定しましょう。HttpOnlyは、Cookie に設定できる属性のひとつで、これが設定されたCookieはJavaScriptの「Document.cookie API」からアクセスすることが出来なくなります。, Cookie情報はサーバー側のセッション管理などで使用するケースが多くJavaScriptで利用する必要はほとんどありません。そのためCookieでセッション情報などの重要な情報を管理する場合は、HttpOnl属性の設定をするべきだと考えられます。, HttpOnl属性を設定することで、XSS攻撃によるCookie情報の漏洩を防ぐことができます。, 本記事では有名な攻撃であるクロスサイトスクリプティング(XSS)について、実際のセキュリティ事故の事例から攻撃例・対策方法について紹介しました。, フレームワークを使って開発する場合は、基本フレームワークがクロスサイトスクリプティング(XSS)の対策をしてくれている事が多いです。, 仮にフレームワークでクロスサイトスクリプティング(XSS)の対策がない場合は、共通基盤で対策するのが普通です。そのため開発担当者はそこまでクロスサイトスクリプティング(XSS)を意識する必要がないのかもしれません。, しかしクロスサイトスクリプティング(XSS)の知識が全くないと、思わぬ所にXSSの脆弱性を作ってしまう危険性があります。そうならない為にもしっかりとクロスサイトスクリプティング(XSS)の知識を持ち、開発することが必要だと考えられます。, また試験工程でもクロスサイトスクリプティング(XSS)の対策が十分に行われているか確認する事が重要です。. クロスサイトスクリプティング(XSS)とはWebサイトへの有名な攻撃で、他人のWebサイトに悪意のあるコードを登録する攻撃のことをいいます。主に掲示板などの書き込みサイトに悪意のあるコードを投稿し、何も知らないで訪れたユーザーにその悪意のあるコードを実行させ、Cookieなどの情報を抜き取る攻撃です。. インライン記法については、 JavaScriptテンプレートの適用 のインライン記法の項を参照されたい。, XSSの脆弱性への対応としては、JavaScript特殊文字をエスケープすることが基本である。 例となる掲示板アプリケーションは、以下のような処理の流れを想定します。, ①投稿内容を入力するページが表示され、ユーザが投稿内容を入力し、「確認」ボタンをクリックする。 Webアプリケーションに不正なスクリプトを実行させるクロスサイトスクリプティング。ここでは、クロスサイトスクリプティング(XSS)とは何か? 仕組みや攻撃手法について解説いたします。 これに合わせて、本ガイドラインではエスケープしない場合でも文字列をダブルクォート(")で囲んでいる。もちろんシングルクォートで囲んでも問題ない。, 特殊文字がエスケープされることにより、 要素の内容が、外部からの入力に依存する形で動的に生成される場合、任意のスクリプトが埋め込まれてしまう可能性があります。, 危険なスクリプトだけを排除する方法も考えられますが、危険なスクリプトであることを確実に判断することは難しいため、要素の内容を動的に生成する仕様は、避けることをお勧めします。, CSSには、expression関数等を利用してスクリプトを記述することができます。そのためサイトに置かれたCSSを取り込めるような仕様にしておくと、生成するWebページにスクリプトが注入されてしまう可能性があります。, CSSの内容を都度チェックし、危険なスクリプトを排除する方法も考えられます。しかし、手間がかかり、確実に排除することは難しいため、CSSを外部から指定可能な仕様は避けましょう。, 入力されたHTMLテキストに対して構文解析を行い、「ホワイトリスト方式」で許可する要素のみを抽出します。ただし、これには複雑なコーディングが要求されます。また、処理に負荷がかかるといった影響もあるため、実装には十分な検討が必要です。, HTTPのレスポンスヘッダのContent-Typeフィールドには、「Content-Type:text/html;charset=UTF-8」のように、文字コード(charset)を指定できます。, この指定を省略した場合、ブラウザは、文字コードを独自の方法で推定して、推定した文字コードにしたがって画面表示を処理します。, たとえば、一部のブラウザにおいては、HTMLテキストの冒頭部分等に特定の文字列が含まれていると、必ず特定の文字コードとして処理されています。, Content-Typeフィールドで文字コードの指定を省略した場合、攻撃者がこの挙動を悪用して、故意に特定の文字コードをブラウザに選択させるような文字列を埋め込んだ上、その文字コードで解釈した場合にスクリプトのタグとなるような文字列を埋め込む可能性があります。, そのため、Content-Typeの出力時にcharsetを省略することなく、必ず指定しましょう。, WebアプリケーションやWebページを作る人にとっては、使用するユーザーの情報を守るために知っておくべきことです。, 自身が作ったサービスが悪用されないよう、セキュリティ対策はしっかりとやりましょう。. クロスサイト・スクリプティング(以下、XSS)とは、Web ページの出力処理に不備があるときに、悪意あるスクリプトを実行されてしまう脆弱性のことです。別サイトにある罠リンクをクリックすることで、サイトをまたがって(クロスサイト)スクリプトを実行するので、クロスサイト・スクリプティングと呼ばれます。, XSS は理解が難しい脆弱性なのですが、スクリプトが実行されるのはサーバー上ではありません。スクリプトは、Web ページの表示時に利用者のブラウザ上で実行されます。クロスサイト・リクエストフォージェリ(CSRF) はサーバー上で実行される脆弱性なので、違いに注意してください。, XSS は、深刻な脆弱性であるので、XSS の脆弱性が見つかったら早急に対処する必要があります。, XSS は言葉で説明されてもイメージがしにくい脆弱性です。以下の記事で、具体的にどのように XSS の脆弱性が悪用されるか説明していますので参考にしてください。, HTTP のレスポンスヘッダーのContent-Type フィールドには、「Content-Type: text/html; charset=UTF-8」のように、文字コード(charset)を指定します。, HTML の META タグでも、Content-Type で charset を指定できますが、ブラウザの挙動に依存するため、確実に正しい文字コードで表示できるように、HTTP のレスポンスヘッダーで文字コードを指定するようにします。, HTML 要素の属性を’’(シングルクォーテーション)で囲むと、3のエスケープ処理の方法によっては、XSS の脆弱性を埋め込んでしまう可能性があるので、必ず””(ダブルクオーテーション)で囲むようにします。, 出力する全ての要素に対して、以下の文字のエスケープ処理を行います。出力箇所が多く漏れやすいので、確実に対処するようにしてください。, 最近は、JavaScript で HTML を動的に生成することがありますが、その場合もエスケープ処理を行う必要があります。この点については、IPA より公開されている以下の資料を参照してください。, URL は 「http://」や「https://」だけでなく、JavaScript を実行できる「javascript:」という記述もできます。スクリプトが注入されないように、URL は「http://」と「https://」から始まるもののみ出力します(ホワイトリスト方式)。, 要素内容の動的な生成は、安全な形でエスケープするのは非常に難しいため、動的に生成しないようにしてください。, どうしてもシステム要件として動的に生成する必要がある場合には、「体系的に学ぶ 安全なWebアプリケーションの作り方」にエスケープ方法が載っていますが、かなり難易度が高いことがわかると思います。, XSS の保険的対策としては以下のものがありますが、完全に XSS を防ぐことはできないことに注意してください。, &<>”’ などの危険な文字列が入力された場合に、エラーとしたり該当文字を削除する方法です。ですが、画面以外で作成された値には対応できません。, XSS は JavaScript で Cookie にアクセスしようとしますが、Cookie に HttpOnly 属性が付いている場合は JavaScript からはアクセスできません。但し、HttpOnly 属性は全てのブラウザで対応が同じではないことに留意する必要があります。, XSS の脆弱性がある場合に、TRACE メソッドが有効だと、クロスサイト・トレーシングという攻撃が成立し、HTTP リクエストヘッダーの内容を取得されてしまいます。Cookie に HttpOnly 属性を付けていても、HTTP リクエストヘッダーには Cookie は含まれるため、Cookie の漏洩を防ぐことができません。, Webアプリケーションセキュリティに関する記事は、以下のページにまとまっています。ぜひご確認ください。. Created using, "