予期せぬ攻撃を受ける前に!今すぐやっておきたいSQLインジェクション対策まとめ!

プログラムは目的の動作を実現するツールですが、そのツールが外部から攻撃・悪用されないように、セキュリティ対策を講じておかなければなりません。今回は、古くから存在するSQLインジェクションについての対策をまとめました。
SQLインジェクションとは
SQLインジェクションとはWebアプリケーションに対する攻撃手法の一つです。ブラウザからSQLクエリを改ざんして実行することで、自由にデータベースを書き換えてしまいます。聞いただけでも怖いですが、なぜこんなことができるのでしょうか。
例えば、Webサイトに検索フォームがあり、入力ボックスがあるとします。その名前は「id」です。通常、idが入力されると、プログラム側では
$sql = ”SELECT * FROM test WHERE id = '” . $_GET["id"] . ”'”;
の$_GET[“id”]部分に、123等のidが渡されて検索が行われます。
しかし、悪意のある攻撃者が「id」の項目に
「’ or ‘a’=’a」と入力し、これがそのまま実行された場合
$sql = “SELECT * FROM test WHERE id = '' or 'a'='a'”;
というSQLが実行されてしまい、全てのデータが表示されてしまいます。この応用で、SQLを自由に操作してしまうという攻撃です。
たとえ、入力ボックスがなかったとしても、検索の際に、クエリを使っている場合
http://test.jp/test.php?id=123 ↓↓↓ http://test.jp/test.php?id=' or 'a'='a
というように書き換えて、実行される可能性もあります。
SQLインジェクション対策を学べる記事一覧
MySQLとPHPにおけるSQLインジェクション対策について
解説がわかりやすいです。
第29回 SQLインジェクションの復習
間接・直接SQLインジェクションの例など
SQLインジェクションが簡単に試せるプログラム(PHP×sqlite)を作ってみた。
SQLインジェクションのまとめ
SQLインジェクションの攻撃パターンまとめ
実践!Webセキュリティ点検術(最終回)SQLインジェクションの調査と対策
第6回 意外に知られていないブラインドSQLインジェクション
PHPでのSQLインジェクション対策 – プレースホルダ編
プレースホルダを使った対策
第42回 PostgreSQL 9.0に見るSQLインジェクション対策
SQLインジェクション対策の4原則
ブラインドSQLインジェクションのスクリプトをPHPで書いたよ
[sc name=”engeneer”]
SHARE
PROFILE

Webサービスを作るのが大好きです。制作会社10年→フリーランス→受託をやめサービス開発に専念。プログラミングのメンターサービスMENTAは月間流通額約1,300万を突破🚀 YouTubeでは個人開発について語ってます / 「自分のサービスで生きていく」をコンセプトに個人開発オンラインサロン「入江開発室」を運営(詳しいプロフィール)