ホームページ  >  記事  >  バックエンド開発  >  SQL インジェクションとエスケープされた PHP 関数 code_PHP チュートリアル

SQL インジェクションとエスケープされた PHP 関数 code_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:06:34758ブラウズ

SQLインジェクション:

通常の状況では:

delete.php?id=3;
$sql = 'ニュースから削除 where id = '.$_GET['id'];

悪質な状況:

delete.php?id=3 or 1;
$sql = 'id = 3 or 1のニュースから削除' -------これを実行すると全てのレコードが削除されます

適切な措置を講じるべきである。 。 。たとえば、使用する前に数値であるかどうかを確認するなどです。

クライアントから得られる情報は決して信頼できるものではないことを自分自身に納得させてください。 !

エスケープ:

クライアントから送信されるデータには、一重引用符やスラッシュなどの特殊文字が悪意を持って含まれている場合があるため、エスケープして通常の文字に変換する必要があります。この場合、文字列にスラッシュが追加されます ( string $ str )。関数は変数をエスケープできます。ただし、配列内の要素をエスケープする場合は、次のように foreach を使用して配列をループします。

コードをコピーします コードは次のとおりです:
foreach($_POST as $k=>$v) {
}
}



ただし、配列に配列も含まれている場合は、再帰的にエスケープする必要があります。この場合、
が使用されます。 array_walk_recursive(array &$input , コールバック $funcname [,mixed $userdata ])

ユーザー定義関数 funcname を配列 array 内の各セルに適用します。この関数は、より深い配列に再帰的に入ります。通常、 funcname は 2 つのパラメータを受け入れます。入力パラメータの値が最初のパラメータとして使用され、キー名が 2 番目のパラメータとして使用されます。オプションの引数 userdata が指定されている場合、それはコールバック funcname の 3 番目の引数として渡されます。成功した場合は TRUE を返し、失敗した場合は FALSE を返します

つまり、カスタム関数を使用する場合、少なくとも 2 つのパラメーターを受け取ることができる必要がありますが、addslashes() は 1 つのパラメーターしか受け取ることができないため、次のように関数をカスタマイズします。 ;;

システムは自動的にエスケープします:

PHP にはマジッククオートの概念があります。どうすれば有効になりますか? 回答: PHP.ini で、apache を再起動するだけです。 マジッククオートをオンにすると、システムが$_GET、$_POST、$_COOKIEのデータを自動的にエスケープしてしまうので、それを知らずに再度手動でエスケープする必要があります。最初にマジック シンボルがオンになっているかどうかを判断する必要があります。これを判断するには、値を渡す必要はありません。閉じている場合は 0 を返し、閉じている場合は 1 を返します。

コードをコピー

コードは次のとおりです:

if(!get_magic_quotes_gpc()) { // マジッククオートがオンになっていない場合

function _addslashes(&$v,$k) { $v = addslashes($v); }

array_walk_recursive(&$_GET,'_addslashes');

array_walk_recursive(&$_POST ,'_addslash es');

array_walk_recursive (&$_COOKIE,'_addslashes');

}

http://www.bkjia.com/PHPjc/327604.html
www.bkjia.com
tru​​e


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

技術記事

SQL インジェクション: 通常の状況: delete.php?id=3; $sql = 'delete from news where id = '.$_GET['id']; 悪意のある状況: delete.php?id=3; 'ID = 3 または 1 のニュースから削除' ---...

;

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。