TEDIA会員に登録したメールアドレスとパスワードを入力してください

メールアドレス:

     パスワード:


パスワードを忘れた方はパスワードの確認を行ってください。

TEDIA会員へのご登録がお済みで無い方はこちらで登録ができます


>> テクノロジーポータル TEDIA トップページへ戻る <<

Think IT Software Developer's Think IT Find-IT 失敗しないソフト選び Find-IT TEDIA テクノロジーポータル TEDIA インストールマニアックス2008 インストールマニアックス2008

TEDIA SponsorsOpen Source Web Development Tutorials - Dev Shed

MySQL&PHPアプリからSQLインジェクションを防ぐ
(2009/03/26公開)

編集部より

 この記事については、セキュリティーの観点から一部問題が指摘されています。参照にあたっては、十分注意していただくことをお勧めします。またDevShedの本サイトに投稿された読者の議論を5ページ目に掲載していますので、あわせて参考にしてください。

SQLインジェクションやHTMLフォームの乱用を防止するPHPプログラム

 フォームのセキュリティーがしっかりしていなければ、MySQLのSQLインジェクションにより悪意あるコードが開始され、サイトが攻撃にさらされるということは既に知られています。ドロップダウンメニュー、検索ボックス、チェックボックスなどのHTMLフォームはすべて、この種の乱用のエントリポイントとなる可能性があります。この記事では、この種の攻撃がどのように行われ、どうすれば防止できるかについて説明します。

セキュリティーに関する既知の問題点と背景

 SQLインジェクションの目的は、Webサイトのデータベースと管理を乗っ取り、情報を盗むことです。MySQLのような一般的なオープンソースデータベースは、パスワード、クレジットカード、ユーザー名、個人情報、管理情報などの重要な情報を格納するために、多くのWebサイト開発者が使ってきました。

 これは深刻なハッキングであり、現在多くのWebサイトを脅かしています。Google検索の結果では、警告マークが表示されるので、このようなサイトはすぐに判別できます。「このサイトはコンピューターに損害を与える可能性があります」と表示されたり、Google ChromeやMozilla Firefoxなどのブラウザを使用していると、サイトを表示するときに「悪意のあるソフトウエアが検出されました」などの警告が表示されたりします。

 MySQLが一般的なのは、最も広く使用されているサーバー側スクリプト言語であるPHPと組み合わせて使われているのが理由です。またPHPは、インターネットで圧倒的に多く使われているLinux-Apacheベースのサーバーの主要な言語でもあります。このため、Windowsでのスパイウェアと同じく、PHPはハッカーに簡単に利用される傾向があります。

 ハッキングでは最初に、セキュリティーが確保されていないWebサイトのフォームに、(ドロップダウンメニューのフォーム、検索ボックス、連絡フォーム、問い合わせフォーム、チェックボックスなどを経由して)悪意のあるコードを組み込みます。ほかの高度なフォームでも、セッション関連のURL経由でなら挿入が可能ですが、この話題はこの記事の範囲外です(手順の詳細については、次のページにあるフローチャートを参照してください)。

 次に、悪意のあるコードはMySQLデータベースに転送され、「挿入」されます。この処理がどのように働くかを理解するため、次に示すような基本的な普通のMySQLのSELECTステートメントクエリーについて、考えてみます。

SELECT * FROM xmen WHERE username = 'wolverine'

 このクエリーは、「xmen」テーブルを持つデータベースに問い合わせ、MySQLからユーザー名「wolverine」についての特定のデータを返します。

 ユーザーがWebフォームで「wolverine」と入力すると、そのデータがMySQLクエリーに渡され、上のステートメントが生成されます。

 入力が検証されない場合、ハッカーが入力を操作して、データベースのコントロールを握ることが可能になります。例えば、ユーザー名を次のように設定します。

' OR ''=''

 通常のPHPとMySQL構文を使用して入力を処理すれば、悪意のあるコードが入力されるたびに「不正なクエリー」というメッセージが表示され、安全であると思うかもしれませんが、実際にはこれは成り立ちません。

 現実には、熟練したハッカーは多数存在し、簡単にセキュリティーの壁を抜けることができます。一度セキュリティーが破られると、それを修正することは困難になります。データベースのクリーニングを行い、管理アクセスを一新する必要があります。


1    2    3    4    5    次のページ

Copyright © 2008 Ziff Davis Enterprise, Inc.
Originally appearing in the U.S. Edition of Dev Shed. All Rights Reserved.