★パターン1:
◆攻撃内容
・攻撃者が不正なSQLをデータベースに実行させて、データを盗んだり改ざんする
◆攻撃例
・以下のようなコードに不正のGETパラメータ部分に、「1 OR 1 = 1」と入力された場合、条件が常に真になってしまう。
mysql_query(“SELECT * FROM table WHERE id='”.$_GET[‘id’].”‘”, $conn);
・上記のようなコードの脆弱性を利用して、SELECT / DELETE / UPDATE等のあらゆるSQLを実行させる
・DBにファイル書き出し権限が与えられている際に、それを利用した攻撃(悪意のあるPHPスクリプト作成など)
◆攻撃結果
・データベースに保存されているパスワードの漏洩 / 内容の改ざん
・不正スクリプトを実行させられた事による被害
◆対策方法
・バリデート
上記「$_GET[‘id’]」は数値が入ることが想定されているので、予めPHPで「intval()」による代入値のチェックを行う
・クエリ文生成時エスケープ
「addslashes()、mysql_real_escape_string()、pg_escape_string()」等を利用して、実行するSQLの文字エスケープを行う
コメント