前回は、「クロスサイトスクリプティング」でしたね。今回は悪意のある埋め込みという点では共通している「SQLインジェクション」についてお話しましょう。
「SQLインジェクション」とは、どのようなセキュリティホールなのでしょう。
【言葉】 SQLとは、DBへの問い合わせを行うスクリプトです。WEBサイトでDBへ問合せを行うページで不正なSQLを埋め込み、DBに格納されている情報を盗むセキュリティーホールです。
【どうなる】 本来会員の情報などは、本人以外の人は閲覧できないはずですが、不正に埋め込まれたSQLにより、全ての会員情報などDBに登録されてるいろいろな情報が表示されます。プライバシーの問題や認証情報の漏えいによるサービスの不正利用などが発生します。
【対策】
1.DBのテーブル名、項目名に推測しやすい名前を付けない。
2.DB関連の具体的なエラーは画面に表示されないようにする。
3.Prepared Statementなどを利用してSQLを発行するなどでしょうか。
【テスト方法】 ☆テスト方法はあくまでも例です。機能などにあったテストを実施してください。
(CASE1)
1.URLのパラメターに、SQLを指定※してアクセスする。
2.SQLが無効化されているか確認する。(全てのデータが表示されていない)
※例:http://sample.com/list?id=’ OR ‘1’=’1
(CASE2)
1.検索フォームなどの入力欄に、SQLを入力して処理(検索など)をしてみる。
2.検索結果を表示させるページに遷移し、SQLが無効化されているか確認する。
(入力内容がSQLとして動作する(※2)ようであれば、NGですね。)
※2例えば、検索条件に「’ OR ‘A’=’A」
と入力する。これを結果表示の箇所で、検索条件に関わらず全てのデータが表示されれば、NG。