LoginSignup
148
113

More than 3 years have passed since last update.

XSS と CSRF って結局何が違うのか?

Last updated at Posted at 2020-01-07

XSS と CSRF

セキュリティの文脈で XSS (cross site scripting)CSRF (cross-site request forgeries) がやたら出てくると思うのですが、名前も似てるしなんか悪さするスクリプトを埋め込むんだろうなーくらいにしか理解しておらず、明確な違いがわかっていなかったのでこの機会にまとめてみました。

XSS とは

XSS とは一言で表すと ユーザー(被害者)の Web ブラウザで任意の JavaScript を実行させることを許す脆弱性または攻撃手法 です。
ちなみに略称が CSS ではなく XSS なのは、Cascading Style Sheets とかぶってるのでややこしいからのようです。

XSS を実現する手順

どうやって、被害者のブラウザで JavaScript を実行させるかというと、

  1. 攻撃者が脆弱性のある Web アプリケーションを見つける。
  2. 不正なスクリプトを含んだ罠を用意する。
  3. 罠に誘導するための URL をユーザー(被害者)に SNS / メールなどで配る。
  4. 罠にかかったユーザーが URL にアクセスし、脆弱性のある Web アプリケーションにアクセスする。
  5. Web アプリケーションから不正なスクリプトを含んだ Web ページが返される。
  6. ユーザーの Web ブラウザで不正なスクリプトが実行される。

という手順を踏むことによって実行させます。
結果として Cookie や機密情報抜かれたり、偽情報を表示して社会的信用を落とされたりとか色々やられます。

XSS を防ぐには

1. 攻撃者が脆弱性のある Web アプリケーションを見つける。 と書きましたが、HTML 生成時に特殊文字をエスケープしないことが XSS を実現させてしまう一因となってしまいます。

例えば、入力フォームに検索条件を入力して、サーバーから返された検索結果を表示するようなサービスの場合、<> をエスケープせずにそのまま入力できるようにしてしまうと、<form method="POST" ...>みたいな感じで入力情報を別のサーバーに飛ばすフォームをブラウザにレンダリングさせることができるわけです :thinking:

そのため対策として、HTML の特殊文字のエスケープ がとても大切になります。

CSRF

続いて CSRF です。CSRF を一言で表すと 正規ユーザを誘導し、強制的に特定の処理を実行させる攻撃を許す脆弱性または攻撃手法 と言えます。
forgeries/forgery ってあまり聞かないですよね... 偽造 という意味らしいですよ。(サイトをまたがってリクエストを偽造する :thinking: )

CSRF を実現する手順

どうやって強制的に特定の処理を実行させているかというと、

  1. ユーザーが特定の Web サービスにログインする
  2. 攻撃者が用意した罠ページにユーザーがアクセスしてしまう
  3. 罠ページから攻撃コードが Web サービスに送られてしまう
  4. ユーザーはログインが完了しているので、Web サービスにリクエストが届いてしまう

強制的に実行させる特定の処理と言っているのは、例えば通販サイトであれば 商品の不正な購入 であったり、掲示板サービスだったら不正な書き込みさせると言った感じです :thinking:

CSRF を防ぐには

CSRF は正常にログインしているのでサーバーでは不正なリクエストかどうかの判定が難しいところを突いてきている手法だと言えます。
なので、対策としては コメント投稿、商品購入、退会といった副作用が発生する画面の実行時に、想定通りの画面遷移が行われたかどうかを確認するなどして、セッションの管理を不備なく行うことが大切です。
また、事前にユーザーにサーバーからトークンを渡しておいて、副作用が発生する画面の実行時にトークンが正しいか確認するということも有効です。

まとめ

XSS

  • 不正なスクリプトが実行されるのはユーザーの Web ブラウザ
  • 受ける被害は機密情報を抜かれる、偽情報が表示され社会的信用を落とされるなど
  • 対策として HTML の特殊文字のエスケープが有効

CSRF

  • 不正なスクリプトが実行されるのは Web サーバ
  • 受ける被害は通販サイトであれば商品の不正な購入、掲示板サービスだったら不正な書き込みなど
  • 対策として、副作用が発生する画面の実行時に、想定通りの画面遷移が行われたかどうかを確認する。または、事前に渡したトークンが正しいものであるかをチェックするということが有効
148
113
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
148
113