ホームページ  >  記事  >  バックエンド開発  >  PHPの魔法の引用符とは何ですか

PHPの魔法の引用符とは何ですか

藏色散人
藏色散人オリジナル
2019-05-30 11:28:375502ブラウズ

PHPの魔法の引用符とは何ですか

マジック クオートとは:

マジック クオートは、PHP に入力されるデータを自動的に変換するためにプログラムによって使用されます。スクリプトプロセス。オンにすると、すべての ' (一重引用符)、" (二重引用符)、\ (バックスラッシュ)、および NULL 文字は自動的にバックスラッシュでエスケープされます。addslashes() 関数と同じ効果があります。

Magic quote ディレクティブ:

magic_quotes_gpc は HTTP リクエスト データ (GET、POST、COOKIE) に影響します。実行時には変更できません。PHP のデフォルト値は on です。get_magic_quotes_gpc() を参照してください。

magic_quotes_runtime オンにすると、データベースやテキスト ファイルなどの外部ソースからデータを取得して返すほとんどの関数は、バックスラッシュでエスケープされたデータを返します。このオプションは実行時に変更できます。PHP のデフォルト値はオフです。を参照してください。 set_magic_quotes_runtime() および get_magic_quotes_runtime()

magic_quotes_sybase オンにすると、一重引用符を反転するのではなくエスケープするために一重引用符が使用されます。スラッシュ。このオプションは、magic_quotes_gpc を完全にオーバーライドします。両方のオプションがオンになっている場合、同時に、一重引用符は '' にエスケープされます。二重引用符、バックスラッシュ、および NULL 文字はエスケープされません。その値の取得方法は、ini_get() を参照してください。

マジック クオートの役割:

マジック クオートの元々の導入は、SQL インジェクションを防ぐためのセキュリティ上の考慮事項でした。PHP 初心者が知らず知らずのうちに役立つ可能性があります。比較的安全なコードがコード内に記述されていますが、現在、プログラマはこのセキュリティ問題をすでによく認識しています。

マジック クォーテーション マークの欠陥:

移植性: プログラミング時に考慮されるのは、データベース転送メカニズムまたはプリペアド ステートメントを使用してマジック クォーテーション マーク関数を置き換えることです。 get_magic_quotes_gpc() を使用して、それが開かれているかどうかを確認し、それに応じてプログラムすることができます。

パフォーマンス: エスケープされたデータのすべての部分をデータベースに挿入する必要があるわけではないため、 PHP に入力されるデータはエスケープされますが、プログラムの実行効率に一定の影響を及ぼします。実行時にエスケープ関数 (addslashes() など) を呼び出す方が効率的です。php.ini-dist はデフォルトでこのオプションをオンにしていますが、 php.ini-recommended では、主にパフォーマンス上の理由からデフォルトでオフになっています。

不便: すべてのデータをエスケープする必要があるわけではないため、エスケープする必要のない場所でエスケープされたデータが表示されるのは迷惑です。たとえば、フォームから電子メールを送信すると、\' が大量に表示されます。この問題を解決するには、stripslashes () 関数処理を使用できます。

マジック クオートの切り替え:

magic_quotes_gpc は ini_set() では設定できません。magic_quotes_gpc を設定するには 3 つの方法があります。

1. PHP 設定ファイル php.ini を変更します。この方法では、サーバーを変更するには管理者権限が必要ですが、単なる仮想空間の場合は、後の 2 つの方法しか使用できません。

; Magic quotes
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off
; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off
Use Sybase-style magic quotes (escape ' with '' instead of \').
Magic_quotes_sybase = Off

2.htaccessで設定します。これは、サーバーが htaccess をサポートしている場合にのみ使用できます。

php_flag magic_quotes_gpc Off

3. コード内のシールド。この方法は移植性が高くなりますが、効率が最も低いため、サーバー管理権限がある場合は、構成記事を変更して magic_quotes_gpc をオフにすることをお勧めします。

コード例:

<?php
if (get_magic_quotes_gpc()) {
    function stripslashes_deep($value)
    {
        $value = is_array($value) ?
                    array_map(&#39;stripslashes_deep&#39;, $value) :
                    stripslashes($value);
        return $value;
    }
    $_POST = array_map(&#39;stripslashes_deep&#39;, $_POST);
    $_GET = array_map(&#39;stripslashes_deep&#39;, $_GET);
    $_COOKIE = array_map(&#39;stripslashes_deep&#39;, $_COOKIE);
    $_REQUEST = array_map(&#39;stripslashes_deep&#39;, $_REQUEST);
}
?>

概要:

マジック クオートはもともと SQL インジェクションを防ぐために導入されたもので、開発者にとっては有益です。また、使用時に多くの不便をもたらしますが、現在ではより優れた代替手段が増えているため、まだ php 5.3.0 または php 5.3.0 より前のバージョンで開発している場合は、マジック クオートの使用を避ける必要があります。 PHP 5.4.0 以降は削除されました。

以上がPHPの魔法の引用符とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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