タイトル: 仕事の都合上、WEB セキュリティに関する関連知識を学ぶ必要があるため、それを要約するためにこの記事を書いており、それ以外の目的はありません。この記事を読む読者は、SQL ステートメントを作成した経験があるか、SQL ステートメントを理解できることを前提としています
海外では 2002 年の時点で既に SQL インジェクションの脆弱性に関する技術記事が数多く掲載されていましたが、中国では 2005 年頃から始まったものです。
現在、SQL インジェクションの脆弱性は過去のものかというと、あらゆる規模の国内 Web サイトがすでに脆弱性を修正しています。しかし、あらゆる秘密には必ず隙があります。侵入は偶然ですが、安全は絶対に避けられません。
数日前、インターネット上で大きく拡散した「トレーラー」事件は、私たちに安全への警鐘を鳴らしました。
Web サイトを開発する場合、セキュリティ上の理由から、ページから渡される文字をフィルタリングする必要があります。通常、ユーザーは、URL アドレス バー、ログイン インターフェイス、メッセージ ボード、検索ボックスなどのインターフェイスを通じてデータベースのコンテンツを呼び出すことができます。これにより、ハッカーが悪用する機会が多くなります。最悪の場合、データが漏洩したり、サーバーがダウンしたりする可能性があります。
今では、多くの Web サイト開発者がこのことを知っていますが、その理由を知りませんし、私も同様なので、それをすぐに補って学習コンテンツとしてまとめます。初心者の方の入門になれば幸いです。
1. SQL インジェクションの手順
a) インジェクションポイントを見つける (ログインインターフェイス、メッセージボードなど)
b) ユーザーが自分で SQL ステートメントを構築します (例: ' または 1=1#。これについては後で説明します)
c) SQL ステートメントをデータベース管理システム (DBMS) に送信します
d) DBMS はリクエストを受信し、リクエストをマシンコード命令に解釈し、必要なアクセス操作を実行します
e) DBMS は返された結果を受け取り、処理してユーザーに返します
ユーザーは特別な SQL ステートメントを作成するため、(SQL ステートメントが十分に柔軟である限り) 特別な結果が返される必要があります。
以下では、例を通して SQL インジェクションを説明します
2. SQL インジェクションの例の詳細な説明(上記のテストは、サーバー上で magic_quote_gpc が有効になっていないことを前提としています)
1) 準備作業
まず、SQL インジェクションの脆弱性を実証し、バックエンド管理者インターフェイスにログインしましょう
まず、テスト用のデータ テーブルを作成します。
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ユーザー名` varchar(64) NOT NULL,
`パスワード` varchar(64) NOT NULL,
`email` varchar(64) NOT NULL,
主キー (`id`)、
UNIQUE KEY `username` (`username`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
テスト用のレコードを追加します:
INSERT INTO users (ユーザー名、パスワード、メールアドレス)
VALUES('MarcoFly',md5('test'),'marcofly@test.com');
次に、ログイン インターフェイスのソース コードを貼り付けます:
<頭>