PHPとSQL注入攻撃[二]


PHPとSQL注入攻撃[二]Magic Qu otesは上述したように、SQL注入は主に不安定なデータをデータベースに提出して攻撃目的を達成することである。SQLの注入攻撃を防止するために、PHPは入力した文字列を処理する機能を備えています。より低い層で入力を安全に初歩的に処理することができます。即ち、Magicです。 Qu otesphp.ini magic_quot tesgpc)magic_ならquot tesgpcオプションを有効にすると、入力した文字列のシングルクォーテーションマークと、他の文字の前に自動的にバックスラッシュが加算されます。でもMagic Qu otesは一般的な解決策ではなく、潜在的な危険性のあるすべての文字を遮断できず、多くのサーバーでMagic Qu otesは有効にされていません。したがって、SQL注入を防ぐために他の様々な方法を使用する必要があります。多くのデータベース自体がこのような入力データ処理機能を提供しています。例えばPHPのMySQLの操作関数の中にmysql_というものがあります。リアル.エスケープstring()の関数は、特殊文字とデータベース操作でエラーが発生する可能性のある文字を変換します。参考:http://cn2.php.net/mysql_リアル.エスケープstringに興味があります。下のコメントを見てください。このコードを見てください。 Qu otes機能有効化if (ゲットするmagic_quot tesgpc() { $name = strippslashes($name);else{$name} = mysqlリアル.エスケープstring($name);mysqlquery(「SELECT」 * FROM アメリカ WHERE name='{name}注意してください。私たちはデータベースの機能を使う前にMagicを判断します。 Qu otesが開いていますか?前の例のように二回で処理を繰り返すとエラーが発生します。MQが有効になったら、私たちは追加された\を取り除いて真実のデータを得るべきです。上記の文字列形式のデータを前処理する以外に、Binaryデータをデータベースに保存する場合も、前処理に注意してください。データベース自体の格納フォーマットと競合して、データベースが崩壊し、データレコードが失われ、ライブラリ全体のデータが失われることがあります。いくつかのデータベースはPostgreSQLのように、バイナリデータをエンコードするための関数pg_を提供します。エスケープbytea()は、Base 64と同様にデータを符号化することができる。たとえば:/ for plin-text ダタ use:pg_エスケープstring($reglar u)ストリングス for binary ダタ use:pg_エスケープbytea($binary_)データもう一つの場合には、このような仕組みを採用します。それはデータベースシステム自体がサポートしていない多バイト言語です。中国語、日本語などです。一部のASCII範囲とバイナリデータの範囲が重複しています。ただし、データをエンコードするとLIKEのようになる可能性があります。 abc%のようなクエリ文は無効です。