保存されているXSSは?



保存されたクロスサイトスクリプティング(XSS)脆弱性
RoonZによるUnsplash写真
クロスサイトスクリプティング、またはXSSは、今日のWebアプリケーションを脅かす最も一般的な脆弱性の一つです.それは一貫してOWASPのトップ10の脆弱性の一つとして命名されている現代的なアプリケーションで一般的です.今日、我々はXSS脆弱性が何であるかについて飛び込みます — 最も危険なタイプのXSS — は、どのようにそれらを防ぐために.

何がXSSですか?
XSSは攻撃者が悪質なスクリプトを犠牲者のブラウザで実行できる時です.
多くの時間、アプリケーションは、Webページを構築するユーザー入力を使用します.そして、そのアプリケーションがユーザー入力とWebページを構成する合法的なコードの違いを伝えることができない場合、攻撃者は実行スクリプトの形式で入力を入力し、被害者のブラウザによって実行されることができます.
その後、被害者のブラウザは悪意のあるスクリプトを実行します.これらのスクリプト(JavaScript、VBScriptなど)は、クッキーを盗むために使用することができます個人情報をリーク、サイトの内容を変更したり、悪意のあるサイトにユーザーをリダイレクト.
XSSの3つの主要な種類があります:保存XSS、反射XSS、およびDOM XSS.これらのクロスサイトスクリプティング欠陥の違いは、悪意のあるコードがどのように犠牲者に届けられるかです.今日、私たちは、クロスサイトスクリプティングの最も危険なタイプに集中します.

保存されているXSSは何ですか?
格納されたXSSは、XSSペイロードまたは悪意のあるスクリプトが犠牲者のブラウザーによって検索される前にサーバーに格納されるときです.
アプリケーションがユーザー入力を受け入れ、そのサーバーにそれを格納し、適切な予防策なしでWebページを構築するためにそれを使用すると、悪意のあるJavaScriptコードは、データベースに侵入し、その後、被害者のブラウザにすることができます.
たとえば、インターネットフォーラムは、ユーザーがコメントを投稿できるようにしましょう.ユーザーが投稿にコメントを送信すると、そのユーザー入力は、ブログ投稿を見る人に提供されるWebページに表示されます.通常、ユーザはこれらのようなテキストコメントを送信します.
Vickie: Thanks for this great post!

Ben: I think this topic is more...

Jo: Appreciate the discussion, in this case...
しかし、今、攻撃者がこのようにコメントを提出するならば、どうですか?
<script>alert("XSS by Vickie");</script>
このコメントはJavaScriptコードの構文を含んでいます.タグ内に含まれる内容がJavaScriptコードとして解釈され、プレーンテキストではないことをブラウザに示します.したがって、攻撃者がJavaScriptコードでコメントを提出するならば、彼らはそのブログを見るどんなユーザーのブラウザーによって実行されるそのコードを持つことができます!JavaScriptコードアラート(“ビッキー”でXSS)は、“ビッキーによってXSS”を読み取る被害者のブラウザ上のポップアップを生成します.ユーザーがフォーラムにコメントを表示するたびに、ブラウザが埋め込まれたJavaScriptを実行します.これは、格納されたクロスサイトスクリプティングと呼ばれる、または格納されたXSS、ペイロードが最初にサーバーに格納される前に、被害者のブラウザによって取得される.
格納されたXSS攻撃の間、攻撃者は彼らの悪意のあるスクリプトを標的アプリケーションのサーバーに保存して、犠牲者がそれにアクセスするのを待ちます.ユーザーがページにアクセスするたびに、悪意のあるスクリプトがブラウザで実行されます.攻撃者が単一のペイロードで多くの犠牲者を攻撃することができるので、格納されたXSSはXSSの最も危険なタイプである傾向があります.そして、格納されたXSS攻撃の間、すべてのユーザーが犠牲者になるためにしなければならないことは埋め込まれたペイロードでページを見ることになっています、しかし、反射して、DOM XSSは通常、被害者に悪意のあるリンクをクリックする必要があります.

どのようにXSSを防ぐことができますか?
それで、どのように、あなたはXSSを防ぐことができましたか?
まず第一に、あなたがユーザー提出入力を決して信用してはならないことを覚えておいてください!XSSを防ぐために、ユーザーが入力した入力がブラウザの情報をあなたのウェブページで解釈する方法に影響を与える危険な文字を含んでいないことを確認する必要があります.あなたは、堅牢な入力合法化と出力エスケープを実行することによってそれをすることができます.
悪意のあるペイロードを含むかもしれないユーザ入力と拒否入力を検証できます.例えば、文字列“を含むユーザー入力は、入力がXSSペイロードを含む良い指標です.この場合、リクエストをブロックできます.攻撃者が異なる方法でXSSを誘発することによってしばしばこれらの保護を迂回することができるので、既知の悪意のあるストリングを容認することの代わりに、英数字のような限られたセットの手紙を厳格に、そして明示的に許容する方がよいことを心に留めておいてください.
また、Webページにそれをレンダリングする前に、ユーザーの入力で特殊文字をエスケープすることができます.エスケープとは、特殊文字を符号化して、文字列を文字列ではなく文字で解釈することです.
グラム.例えば、左右の角括弧はHTML文字& lt & gt ;にエンコードされ、HTMLで実際のタグとして表示されません.角括弧<<>>の他に、& dquot ;キャラクタ&シングル&ダブルクォート& gt ;などのHTMLで特別な意味を持つ文字をエスケープする必要があります.多くの最新のJavaScriptフレームワークのような反応と角度は自動的にこれを行うので、多くのXSSの脆弱性を使用する右JavaScriptフレームワークを選択することによって防ぐことができます.
また、XSSバグが発生した場合、攻撃者が原因となるダメージを制限する方法もあります.攻撃者がXSS攻撃を通してユーザークッキーを盗むのを防ぐために、あなたのサイトの敏感なクッキーにhttponly旗をセットするべきです.最後に、コンテンツセキュリティポリシーHTTPレスポンスヘッダーを使用してソースのリストからスクリプトのみを実行するようにブラウザに指示することができます.
しかし、あなたのコードに既に存在するXSS脆弱性についてどうすることができますか?静的解析(SAST)ツールを使用してコードをスキャンして、この投稿で述べた戦略のいずれかでそれらを修正することによって検出できます.コード解析や静的解析を使用すると、XSS保護が不足しているアプリケーションのポイントを識別でき、アプリケーション内でXSSを発見する最も効率的な方法です.ShiftLeftの静的解析ツールNG - Sastはあなたのコードにクロスサイトのスクリプトのバグを見つけることができますし、それらを修正するのに役立ちます.こちらをご覧ください.
読書ありがとう!何があなたのための安全なソフトウェアの開発の最も困難な部分ですか?私は知りたい.Twitterでお気軽に接続
.