はじめに
この記事はWebの基礎をおさらいカレンダー Advent Calendar 2022の記事です。
このカレンダーでは、なんとなくわかった気になっている、Webの知識をおさらいします。
興味をもし持ってくださった方は、購読いただけると嬉しいです!
今回はXSS(クロスサイトスクリプティング)について説明します!
XSS(クロスサイトスクリプティング)とは
悪意のあるクライアントサイドのコードをWebサイトに挿入させ、スクリプトを実行させるセキュリティ攻撃のこと。
CrossSiteScriptingで、CSSと略称がかぶってしまうので、XSSと表記されている。
種類
攻撃手法に応じた種別名称があります。
- 反射型 XSS
- 格納型 XSS
- DOM Based XSS
反射型XSS(Reflected XSS)
攻撃者が用意したURLを叩いた際に、リクエストにスクリプトに相当する文字列が含まれ、そのスクリプトをそのままレスポンスとして返して出力してしまうタイプのもの。
例えば、クエリパラメータにスクリプトを入力してユーザーにアクセスさせる例がある。
?search_word=<script>cookie取得などの攻撃スクリプト</script>
結果として
URLを叩いてしまうだけで、ユーザーのcookie情報を取得して、攻撃者のサーバーに送信するというようなことが可能になってしまう。
スクリプトがそのまま送信者の元に返って、実行されることから反射型XSSと呼ばれる。
格納型 XSS(Stored XSS)
掲示板やQiitaのような投稿サイトなど、ユーザーがコンテンツを投稿できる仕組みがある時に、
そのコンテンツの中に直接悪意のあるデータを書き込んで格納しておくことで、ユーザーに悪意あるスクリプトを実行させる手法。
ユーザーが該当の格納データを表示するたびに、その悪意あるスクリプトが実行されてしまうことから格納型 XSSという。
DOM Based XSS
サーバー側ではなく、クライアント側で動的にDOM操作を行う際に、悪意あるスクリプトが埋め込まれてしまうことで発生する。
insertAdjacentHTML や innerHTML
などのHTMLを操作するjavascriptのメソッドを使う際はよく注意して使用する必要がある。
クライアントサイドで実行されるため、検知が難しいケースがある。
DOM操作を起点に悪意あるスクリプトを実行させることからDOM Based XSSという。
被害
- セッションハイジャック
- 例: cookieからセッション情報などを取得され、本人に成り代わってアプリケーションの操作をされてしまう。
- 機密情報漏洩
- 例: フォームに入力したデータなどを送信され、盗まれてしまう。
- 不正な操作
- 例: 投稿サイトなどに自動スクリプトによって意図せぬ投稿をさせられてしまう。
- ページの偽造
- 例: ページの内容を書き換えて、偽物のログイン画面を表示したりすることで不正にIDやパスワードを盗まれてしまう。
対策
- サニタイジング
- 入力値の制限
- WAFでの防御
サニタイジング
<
や>
などスクリプトを構成する文字列を検知して、無害化すること。
例えば<script>
は<script>
のように置換される。
基本的に、ユーザーが入力した内容やユーザーに表示される内容にはサニタイジング処理をしよう。
入力値の制限
数値のみや文字数制限、記号の不許可など入力フォーム自体に制限をかける方法。
予めユーザーからは該当の文字列を入力できないようにすることで対策をする。
WAFでの防御
WAF(Web Application Firewall)は、ユーザーの不正な通信を監視するためのセキュリティシステムのことです。
ユーザーのリクエスト内容などを確認して、不正なものがあった場合はブロックをしてくれます。
予期せぬ対応漏れがあったとしても、問題がないようにWAFで防御をしておくと安心です。
終わりに
以上、簡単にXSSについてまとめてみました。
一口にXSSといってもいろんな攻撃パターンがあるので、内容を正しく理解し、対策をしっかり行いましょう!
Webの基礎をおさらいカレンダー Advent Calendar 2022でした。
興味をもし持ってくださった方は、購読いただけると嬉しいです!