Webサイトの脆弱性の最も一般的なクラスの1つは、「クロスサイトスクリプティング」または「XSS」と呼ばれます。 XSSの脆弱性は、ユーザーがJavaScriptを実行させる可能性がある場所です。 XSSの脆弱性にはさまざまな種類があり、重大度はさまざまです。
攻撃者が他のユーザーのセッションでJavaScriptを実行できるという問題は、攻撃者が被害者に表示されているWebサイトに対して何でもできる可能性があることです。 これには、被害者を外部Webサイトにリダイレクトすること、認証トークンを盗むこと、および支払いの詳細を監視することが含まれます。
XSSの脆弱性の最も深刻な形態は、「保存された」または「永続的な」クロスサイトスクリプティングです。 攻撃者がXSSペイロードを作成して送信する可能性があるため、データベースに保存されます。 XSSエクスプロイトがデータベースに保存されていると、長期間にわたって他のユーザーに影響を与える可能性があります。
クロスサイトスクリプティングのもう1つの形式は「反映」です。このタイプはどの時点でも保存されず、代わりにペイロードがブラウザに含まれます。 通常、このタイプのXSSはフィッシング攻撃の一部であり、攻撃者は被害者をだまして悪意のあるリンクをクリックさせようとします。
一般に、ほとんどのXSS攻撃では、ある時点でペイロードがサーバーに送信されますが、一部の攻撃は 純粋にクライアント側であり、サーバーに送信されることはなく、代わりにクライアント側にのみ影響します JavaScript。 これは、JavaScriptドキュメントオブジェクトモデル(DOM)にとどまるため、DOMベースのXSSと呼ばれます。 このタイプの脆弱性は、エクスプロイトがサーバーに表示されることはなく、ログに記録できないため、特定して解決するのが特に困難です。
歴史的に、XSSの脆弱性に対する防止手法は、ユーザーが送信したすべてのデータをフィルタリングし、ブロックリストを使用してJavaScriptで意味のある文字や単語を含むメッセージを拒否することです。 これは、一部の正当なユーザー送信を防ぎながら、フィルターのバイパスを見つけるという軍拡競争につながる傾向がありました。 正しい解決策は、HTMLエンティティを使用してユーザーが送信したデータをエンコードすることです。 HTMLエンティティモジュールを有効にすると、文字はブラウザが正しい記号として表示することを認識しているが、コードとしては処理しない形式に自動的にエンコードされます。