Webサイト制作・iPhoneアプリ開発のPLUS > プログラミング > PHP > 予期せぬ攻撃を受ける前に!今すぐやっておきたいSQLインジェクション対策まとめ!(2013/2/19)
security_sam
予期せぬ攻撃を受ける前に!今すぐやっておきたいSQLインジェクション対策まとめ!

プログラムは目的の動作を実現するツールですが、そのツールが外部から攻撃・悪用されないように、セキュリティ対策を講じておかなければなりません。今回は、古くから存在するSQLインジェクションについての対策をまとめました。

SPONSOR

SQLインジェクションとは

security
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アカウントを作り、SELECTしか使えないようにするという手もあります。これでは重要な情報があって流出を防ぐには至りませんが、情報の書き換えは防げます。

文字列をエスケープする

$_GET[id]=strip_tags(htmlspecialchars($_GET[id]));
$_GET[id]=preg_replace(array(‘/[~;\'\"]/’,'/–/’),”,$_GET[id]);
SQL実行の際に使われると危険な文字列をエスケープします。

また、MySQLならmysql_real_escape_string、PostgreSQLならpg_escape_stringという関数も用意されていて便利です。

SQLインジェクション対策を学べる記事一覧

MySQLとPHPにおけるSQLインジェクション対策について
解説がわかりやすいです。

第1回:SQLインジェクションによるデータベース操作

第29回 SQLインジェクションの復習
間接・直接SQLインジェクションの例など

SQLインジェクションが簡単に試せるプログラム(PHP×sqlite)を作ってみた。

SQLインジェクションのまとめ
SQLインジェクションの攻撃パターンまとめ

実践!Webセキュリティ点検術(最終回)SQLインジェクションの調査と対策

第6回 意外に知られていないブラインドSQLインジェクション

PHPでのSQLインジェクション対策 – プレースホルダ編
プレースホルダを使った対策

第42回 PostgreSQL 9.0に見るSQLインジェクション対策
SQLインジェクション対策の4原則

ブラインドSQLインジェクションのスクリプトをPHPで書いたよ

SPONSOR

PLUS 書店

PLUSについて

Written by PLUS代表 入江 慎吾 
長崎県五島出身。1982年生まれ。福岡在住のWeb制作・iPhoneアプリ開発をしているフリーランスです。お仕事は全国にて受け付けております。Apple、ガジェット、新製品、ゲームが好きです。

PLUSブログの購読にはRSS・Twitterが便利です

Web技術関連、Webサービス、iPhoneアプリ、Apple、ゲームなどなど日々役に立つ、刺激のある記事を更新中です。ぜひ、お見逃しなく!
RSSでは記事全文を配信しています。

PLUSメールマガジン

メールマガジンを登録していただいた方に、更新記事をいち早くお知らせしております。
必ずお役に立てる記事を作っていきますので、この機会にご購読ください。
 

Facebookページでは更新情報や厳選ニュースを配信中