ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルでの SQL インジェクション防止の原則の概要

PHP_PHP チュートリアルでの SQL インジェクション防止の原則の概要

WBOY
WBOYオリジナル
2016-07-13 17:10:481188ブラウズ

国内の多くの PHP プログラマーは SQL インジェクションを防ぐために依然として addslashes に依存していますが、中国語での SQL インジェクションを防ぐために全員がチェックを強化することをお勧めします。 addslashes の問題は、ハッカーが単一引用符の代わりに 0xbf27 を使用できることですが、addslashes は 0xbf27 を 0xbf5c27 に変更するだけで、有効なマルチバイト文字となる 0xbf5c は依然として単一引用符とみなされ、そのため addslashes は正常にインターセプトできません。

もちろん、addslashes は、マルチバイト文字の処理に使用されます。mysql_real_escape_string を使用します。

SQL インジェクションを防止するには、magic_quotes_gpc をオンにしてください

php.iniにmagic_quotes_gpc = Offという設定があります
これはデフォルトではオフになっています。オンになっている場合、ユーザーが送信した SQL クエリが自動的に変換されます
たとえば、「 」を「 」などに変換することは、SQL インジェクションを防ぐ上で重要な役割を果たします。

magic_quotes_gpc=Off の場合、addslashes() 関数を使用します

さらに、PHP マニュアルの get_magic_quotes_gpc の例:

コードは次のとおりです コードをコピー

if (!get_magic_quotes_gpc()) {

$lastname =addslashes($_POST[‘lastname’]);

} 他 {

$lastname = $_POST[‘lastname’];

}

magic_quotes_gpc がすでに開いているときに $_POST['lastname'] を確認するのが最善です。

2 つの関数 mysql_real_escape_string と mysql_escape_string の違いについて話しましょう:

mysql_real_escape_string は (PHP 4 >= 4.3.0、PHP 5) でのみ使用できます。それ以外の場合は、mysql_escape_string のみを使用できます。この 2 つの違いは、mysql_real_escape_string は接続の現在の文字セットを考慮するのに対し、mysql_escape_string は考慮しないことです。

(1) mysql_real_escape_string -- 接続の現在の文字セットを考慮して、SQL ステートメントで使用される文字列内の特殊文字をエスケープします

使用方法は次のとおりです:

コードは次のとおりです コードをコピー

$sql = "username02.='".mysql_real_escape_string($username)."' および 03.password='" のユーザーから ctr として count(*) を選択します。mysql_real_escape_string($pw)."' 制限 1";


カスタム機能

* mysql_real_escape_string() は文字セットを決定しますが、PHP バージョンの要件があります; * mysql_escape_string は接続の現在の文字セットを考慮しません。
コードは次のとおりです コードをコピー


関数 inject_check($sql_str) {
Return eregi('select|insert|and|or|update|delete|'|/*|*|../|./|union|into|load_file|outfile', $sql_str);
}

関数 verify_id($id=null) {
If(!$id) {
exit('パラメータが送信されていません!'); elseif(inject_check($id)) {
exit('送信されたパラメータは不正です!');
elseif(!is_numeric($id)) {
exit('送信されたパラメータは不正です!'); }
$id = 整数($id);
$id を返します
}


関数 str_check( $str ) {
If(!get_magic_quotes_gpc()) {
$str = addlashes($str) // フィルター
; }
$str = str_replace("_", "_", $str); $str = str_replace("%", "%", $str);
$str を返します
}


関数 post_check($post) {
If(!get_magic_quotes_gpc()) {
$post = addlashes($post);
}
$post = str_replace("_", "_", $post); $post = str_replace("%", "%", $post); $post = nl2br($post); $post = htmlspecialchars($post);
$post を返す
}





要約すると:


*addslashes()は強制的に追加されます;

dz での SQL インジェクションを防ぐには、addslashes 関数を使用し、dthmlspecialchars 関数でいくつかの置換を実行します $string = preg_replace(/&(((#(d{3,5}|x[a-fA-F0-9] {4) }));)/, &1, この置換により、インジェクションの問題が解決され、中国語の文字化けの問題も解決されます


http://www.bkjia.com/PHPjc/629626.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/629626.html

技術記事多くの国内 PHP プログラマは依然として SQL インジェクションを防ぐために addslashes に依存していますが、中国語での SQL インジェクションを防ぐために全員がチェックを強化することをお勧めします。 addlashes の問題は、ハッカーが代わりに 0xbf27 を使用できることです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。