ホームページ >バックエンド開発 >PHPチュートリアル >PHP における SQL インジェクションの脆弱性の例 SQL インジェクションの脆弱性の修復_PHP チュートリアル
Web サイトを開発する場合、セキュリティ上の理由から、ページから渡される文字をフィルターする必要があります。通常、ユーザーは、URL アドレス バー、ログイン インターフェイス、メッセージ ボード、検索ボックスなどのインターフェイスを通じてデータベースのコンテンツを呼び出すことができます。これにより、ハッカーが悪用する機会が多くなります。最悪の場合、データが漏洩したり、サーバーがダウンしたりする可能性があります。
1. SQL インジェクションの手順
a) インジェクション ポイントを見つける (ログイン インターフェイス、メッセージ ボードなど)
b) ユーザーが自分で SQL ステートメントを構築します (例: ' または 1=1#、これについては後で説明します)
c) SQL ステートメントをデータベース管理システム (DBMS) に送信します
d) DBMS はリクエストを受信し、リクエストをマシンコード命令に解釈し、必要なアクセス操作を実行します
e) DBMS は返された結果を受け入れ、処理し、ユーザーに返します
ユーザーが特別な SQL ステートメントを構築するため、(SQL ステートメントが十分に柔軟である限り) 特別な結果が返される必要があります。
以下では、例を通して SQL インジェクションを説明します
2. SQL インジェクションの例の詳細な説明 (上記のテストは、サーバー上で magic_quote_gpc が有効になっていないことを前提としています)
1) 準備作業
まず、SQL インジェクションの脆弱性を実証し、バックエンド管理者インターフェイスにログインしましょう
まず、テスト用のデータ テーブルを作成します:
`id`int(11) NOT NULL AUTO_INCREMENT、
`ユーザー名`varchar(64) NOT NULL,
`password`varchar(64) NOT NULL,
`email`varchar(64) NOT NULL,
主キー (`id`)、
UNIQUEKEY `ユーザー名` (`ユーザー名`)
)ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
テスト用のレコードを追加します:
VALUES('MarcoFly',md5('test'),'marcofly@test.com');