ホームページ  >  記事  >  バックエンド開発  >  php.ini_PHP チュートリアルの magic_quote_gpc 関数を理解する

php.ini_PHP チュートリアルの magic_quote_gpc 関数を理解する

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

magic_quote_gpc=onをオンにすると、addslshes()とstripslashes()の機能が実現できるようになります。 PHP 4.0 以降では、このオプションはデフォルトで有効になっているため、PHP 4.0 以降では、PHP プログラム内のパラメータがフィルタリングされていない場合でも、PHP システムは GET を渡すすべてのパラメータ、POST および COOKIE メソッドを介して渡される変数をフィルタリングします。つまり、入力されたインジェクション攻撃コードはすべて自動的に変換されるため、攻撃者にとっては大きな困難となります。

ただし、攻撃者には SQL インジェクション攻撃を実行する機会がまだあります。 。 。 。 。 。前提条件は、パラメータが数値型である場合、そのパラメータは Intval() 関数によって処理されていないことです。これは、 intval() によって処理された後、すべてのデータが強制的に数値に変換されるためです。

前に述べたように、magic_quote_gpc=on をオンにした後は、addlshes() 関数を使用するのと同じになります。ただし、数値型では一重引用符が使用されないため、当然のことながら、addlshes() 関数による変換はバイパスされます。 MySQL に付属の char() 関数または HEX() を使用する場合、char() はパラメータを整数として解釈し、これらの整数の ASCII コード文字で構成される文字列を返すことができます。16 進表現を使用する場合は、数値の前に 0x を追加する必要があります。 。

デモの例:

管理者のユーザー名が admin であることがわかっていて、パスワードがわからないとします。そして、magic_quote_gpc が有効になりました。

SQL ステートメント:

コードは次のとおりですコードをコピー$sql="ユーザー名=$name、パスワード='$pwd'のユーザーから*を選択";
注: 変数 $name は引用符で囲まれていません

この時点で、アドレスバーに username=admin%23 と入力すると、合成された SQL ステートメントは次のようになります:

コードは次のとおりですコードをコピーユーザー名 = 'admin' #' およびパスワード = '';
のユーザーから * を選択します
このとき、URLアドレスバーから入力したシングルクォーテーション(’)にはバックスラッシュが付加され、SQL文は無効となります。

AdminをASCIIに変換するとchar(97,100,109,105,110)になります

この時、アドレスバーに

と入力してください

コードは次のとおりですコードをコピーユーザー名=char(97,100,109,105,110)%23
SQL ステートメントは次のようになります:

コードは次のとおりですコードをコピーユーザー名=char(97,100,109,105,110)#'、パスワード='';のユーザーから * を選択します
実行結果がtrueであればスムーズにバックグラウンドに入ることができます。

数値インジェクション攻撃の場合は、数値パラメータをデータベースに入れる前に intval() を使用してパラメータを強制的に数値にする必要があり、これにより数値インジェクションの脆弱性の発生が排除されます。

例:

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

アドレスバーに次のように入力します:

$id=intval($_GET[‘id’]);

id=’$id’;の記事から*を選択してください

コードは次のとおりです コードをコピー
id=5' または 1=1%23

SQL ステートメントは次のようになります:

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

id='5';の記事から * を選択してください

id='5' または 1=1#;

の記事から * を選択する代わりに

概要:

where username=’$name’,
など、各変数に必ず一重引用符を追加してください。 magic_quote_gpc を有効にしても絶対に安全というわけではありません。数値インジェクション攻撃の場合、addslashes() 関数を使用してパラメータを強制的に数値に変換するだけでは十分ではありません

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/629680.html技術記事 magic_quote_gpc=on をオンにすると、addslshes() とtripslashes() の関数が実現できるようになります。 PHP4.0 以降では、このオプションはデフォルトで有効になっているため、PHP では...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。