この記事は主におかず用です。すでに老鳥になっている人には退屈に感じるかもしれませんが、注意深く見る限り、興味深いものがたくさん見つかります。
この記事を読んだ後は、次のことを理解するだけで済みます。
1. php+mysql 環境がどのように設定されているかを理解します。
2. 主に php.ini と httpd.conf を使用して、php と Apache の設定について一般的に理解します
この記事では主に php.ini の設定を使用します。安全上の理由から、通常は php.ini でセーフ モードをオンにします。つまり、safe_mode = On にします。もう 1 つは、PHP 実行エラーを返す display_errors です。これは多くの有用な情報を返すため、オフにする必要があります。 、
つまり、display_errors=off を設定してエラー表示をオフにすると、PHP 関数実行エラー情報はユーザーに表示されなくなります。
PHP 設定ファイル php.ini には、非常に重要な設定オプション magic_quotes_gpc もあります。上位バージョンのデフォルトは、オリジナルのアンティークレベルの PHP でのみ使用可能です
。
デフォルト設定は magic_quotes_gpc=Off ですが、アンティークなものを使用する人もいます。
php.ini で magic_quotes_gpc=On にするとどうなりますか? パニックにならないでください。空は落ちません。送信された変数内のすべての ' (一重引用符)、" (二重引用符)、(バックスラッシュ)、および null 文字をバックスラッシュを含むエスケープ文字に変換するだけです。たとえば、' は ' になり、
に変更されます。
これが私たちを非常に不幸にする原因です。
しかし、落胆する必要はありません。これに対処する良い方法はまだあります。以下をご覧ください。
3. 一定の PHP 言語の基礎があり、いくつかの SQL ステートメントを理解していること。これらは非常に簡単なので、まだ再充電する時間です。
1: magic_quotes_gpc=Off の場合のインジェクション
ref="http://hackbase.com/hacker" target=_blank>攻撃
magic_quotes_gpc=Off は非常に安全ではありませんが、新しいバージョンではデフォルトで許可されています
magic_quotes_gpc=On ですが、www.qichi.* などの多くのサーバーでは、magic_quotes_gpc=Off も見つかりました。
vbb フォーラムのようないくつかのプログラムもあります。magic_quotes_gpc=On に設定しても、自動的にエスケープ文字が削除され、機会が与えられるので
magic_quotes_gpc=Off の注入方法は依然として非常に人気があります。
A: MYSQL 構文から始めましょう
1.まずはMySQLの基本的な構文についてお話します。勉強が苦手なお子様への補習とも言えます~_~
1)
を選択します
SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT]
Select_expression、...
[INTO {OUTFILE} 'file_name' エクスポート オプション]
[テーブル参照から
[WHERE 場所の定義]
[列名ごとにグループ化,...]
[ORDER BY {unsigned_integer | 式} [ASC | ...] ;
これらは一般的に使用されるものです。select_expression は、取得する列を指します。後で、into outfile を使用して選択結果をファイルに出力することもできます。もちろん、select を使用して直接出力することもできます
たとえば
mysql> 'a' を選択します。
+---+
+---+
|
+---+
セット内の 1 行 (0.00 秒)
詳細については、mysql 中国語マニュアルのセクション 7.12 を参照してください
いくつかの使い方をご紹介します
まずはコードを見てください
このコードは検索に使用されます
……
SELECT * FROM users WHERE username LIKE ‘%$search%’ ORDER BY username
……
?>
ここでは、mysql のワイルドカードについて説明します。ちなみに、「%」はワイルドカード文字です。その中には、「*」と「%」が含まれます。 " はフィールド値の一致に使用されます。% は like と一緒に適用する必要があることに注意してください。また、ワイルドカード文字であるアンダースコア「_」もあります。これは上記とは異なる意味を持ち、任意の 1 文字と一致するために使用されます。上記のコードでは、「*」を使用して返されるすべてのフィールド名を表し、%$search% は $search 文字を含むすべてのコンテンツを表します。
あはは、ASP によく似ています
フォームに送信してください
Aabb%' または ID# による 1=1 の注文
注: # は mysql のコメントを意味します。これは、後で説明する次の SQL ステートメントが実行されないことを意味します。
なぜ or 1=1 を使用するのか疑問に思う人もいるかもしれません。以下を参照してください
送信されたコンテンツを SQL ステートメントに入れて次のようにします
aabb を含むユーザー名がない場合、or 1=1 は戻り値を true にし、すべての値を返すことが可能になります
まだやれる
フォームに送信
%' ID# で並べ替えます
または
' ID番号で注文します
これを SQL ステートメントに取り込むと、
になります。
SELECT * FROM users WHERE username LIKE ‘% %’ id# で注文 ユーザー名で注文
そして
SELECT * FROM users WHERE ユーザー名 LIKE ‘%%’ ID# で注文 ユーザー名で注文
もちろん、すべてのコンテンツが返されます。
すべてのユーザーがリストされ、場合によってはパスワードもリストされます。
最初に例を示します。実際には、Select ステートメントはほぼどこにでも使用されます。
2) 以下のアップデートを参照してください
これについては、Mysql 中国語マニュアルで説明されています:
UPDATE [LOW_PRIORITY] tbl_name SETcol_name1=expr1,col_name2=expr2,...
[WHERE 場所の定義]
UPDATE は、既存のテーブル行の列を新しい値で更新します。SET 句は、変更する列とその値を指定します。WHERE 句が指定されている場合は、どの行を更新するかを指定します。それ以外の場合は、すべての行を更新します。が更新されます。
詳細については、MySQL 中国語マニュアルのセクション 7.17 を参照してください。ここで詳しく紹介すると非常に長くなります。
上記のことから、更新は主に記事の変更やユーザー プロフィールの変更などのデータ更新に使用されることがわかります。
まずはコードを見てください
誰でも理解できるように、まず表の構造を説明しましょう
CREATE TABLE ユーザー (
id int(10) NOT NULL auto