XSSとCSRFの違いメモ

3分でわかるXSSとCSRFの違い

XSS

ユーザーがWebページにアクセスすることで不正なスクリプトが実行されてしまう脆弱性または攻撃手法

xss

XSSによる被害例

攻撃者による不正ログイン(なりすまし)
利用者のCookieが攻撃者の手に渡ることで、Cookie内にある利用者のセッション情報がそのまま使用されてしまい、利用者の名をかたってサービスを使用されてしまう危険性があります。

XSSへの代表的な対策

Webページに出力するデータのエスケープ処理
Webページの出力に際して特別な意味を持つ文字列(例えば「<」、「&」など)は単なる文字列として出力するようにしましょう。また、エスケープの対象としては、利用者が画面から入力した値はもちろん、外部システムからのデータなどWebページの出力対象となるものは必ずエスケープすることが重要

CSRF

Webアプリケーション利用者自身が意図しない処理が実行されてしまう脆弱性または攻撃手法

csrf

CSRFによる被害例

利用者の意図しないWebアプリケーション上の処理実行
図でも表したように、本来はログインした利用者のみが許される記事の投稿処理などがあげられます。

CSRFへの代表的な対策

Formページ返却時のトークン付与
今回の例でいうと、はじめに掲示板への書き込み画面を表示する際にサーバがクライアントに対して特定の文字列(トークン)を設定します。実際に書き込みのリクエストがあった際にサーバーが「この人に送ったトークンと同じトークンがリクエストに入ってる?」と確認することで、攻撃者からの不正なリクエストを防ぐことができます。これは、攻撃者は利用者に送信したトークンの値を知らないためです

XSSとCSRFの違い

観点 XSS CSRF
実行される場所 Webブラウザ(Client) Webアプリサーバ(Server)
実行可能な処理 基本的に自由*1 Webアプリで定義された処理
実行の前提 特になし Webアプリにログイン済み*2

*1 JavaScriptで実行可能な範囲であればという意味です
*2 Webアプリ利用者(被害者)がCSRF脆弱性を持つWebアプリケーションに対してログイン済みという意味です

Cookieのhttponly属性

参考

Cookieの基本

httponly属性

次のように、CookieをHTTPレスポンスヘッダーで送るときにhttponly属性を付けると、そのCookieはJavaScriptからはアクセスできなくなる。

1
Set-Cookie: a=apple; httponly; path=/

httponly属性により、悪意のあるJavaScriptからCookieを守ることができる。

JSONレスポンスのXSS

脅威

Internet Explorer 8 など、一部の古いブラウザでは、HTML構文を含むファイルをHTML として
誤ってレンダリングする場合があります。
このため、悪意あるユーザがJSON レスポンスに悪意あるHTML構文の挿入に成功した場
合、XSSが発火する可能性があります。

対策

全てのJSONレスポンスのHTTPヘッダに以下のようなヘッダを設定することで XSS のリスクを緩和できます。

1
2
X-Content-Type-Options: nosniff
Content-Disposition: attachment; filename="XXX.json

(XXXは任意のファイル名)
X-Content-Typeでコンテンツ種別の推論を無効化することで、誤ってHTML として表示される事を防止します。

Content-Dispositionでダウンロードファイルとして明示することでブラウザでのレンダリングを防止します。

クリックジャッキング対策

クリックジャッキングの原因

他ドメインのサイトが、iframeであなたのサイトを読み込めてしまうのが原因

「iframeで読み込み可能なページに、更新系の処理が実装されていること」が根本原因

iframeで他のサイトを埋め込むこと自体は別に悪いことではなく、例えばWebページ上でYouTube動画を再生できるような仕組みはiframeで構成されています。

クリックジャッキング対策

X-Frame-Optionsヘッダに、「SAMEORIGIN」もしくは「DENY」を設定

参考URL

クリックジャッキング脆弱性をこの目で確かめてx-frame-optionsヘッダを設定した

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×