前提
個人おさらい用にまとめたもの
クロスサイトスクリプティング (XSS)
XSS は、攻撃者が Web サイトを通じて他のユーザのブラウザにクライアントサイドのスクリプトを挿入することを可能にする一連の攻撃を表すために使用される用語
SQL インジェクション
SQL インジェクションの脆弱性により、悪意のあるユーザはデータベース上で任意の SQL コードを実行することができ、ユーザの許可に関係なくデータへのアクセス、変更、削除ができる。
SQL インジェクションの種類には、エラーベースの SQL インジェクション、ブールエラーに基づく SQL インジェクション、および時間ベースの SQL インジェクションがある。
脆弱性が存在するパターンの例
statement = "SELECT * FROM users WHERE name = '" + userName + "';"
HTML フォームから提供された特定の名前(ユーザー) を持つすべてのユーザを一覧表示することを目的としています。
ユーザが実名を指定した場合、そのステートメントは意図したとおりに機能します。ただし、悪意のあるユーザは userName に太字のテキストを指定するだけで、この SQL ステートメントの動作を次の例の新しいステートメントに完全に変更する可能性があります。
SELECT * FROM users WHERE name = 'a';DROP TABLE users; SELECT * FROM userinfo WHERE 't' = 't';
変更された文は、users テーブルを削除し、userinfo テーブルからすべてのデータを選択する (すべてのユーザの情報を表示する) 有効な SQL 文を作成します。これは、挿入されたテキストの最初の部分 (a';) が元の文を完成させるために機能する。
回避方法
SQL クエリに渡されるユーザデータがクエリの性質を変更できないようにする必要があります。これを行う1つの方法は、
SQL で特別な意味を持つユーザ入力内のすべての文字をエスケープすることです。
SELECT * FROM users WHERE name = 'a\';DROP TABLE users; SELECT * FROM userinfo WHERE \'t\' = \'t';
クロスサイトリクエストフォージェリ (CSRF)
CSRF 攻撃は、悪意のあるユーザが他のユーザの資格情報を使用して、そのユーザの知らないうちに同意なしでアクションが実行可能
例
特定のサイトでログインユーザがアカウント名と金額を含むHTTP POST リクエストを使用して特定のアカウントに送金できることを知っている悪意のあるユーザ
顧客が攻撃対象のサイトにアクセスしてログインします。
認証を行いOKであればセッションIDが顧客に発行されます。
顧客が(気づかずに)悪意あるサイトにアクセスします。
悪意あるサイトからレスポンスが返されます。
仕込まれたJavaScriptがブラウザ上で実行されます。
商品の注文確定処理が行われてしまいます。
参考
https://developer.mozilla.org/ja/docs/Learn/Server-side/First_steps/Website_security