マジック クオートは、PHPer にとってよくある質問です。今日偶然見かけた記事と、PHPマニュアルとその返信を合わせて簡単にまとめてみます。
つまり、Magic quotes をオンにすると、入力されたデータが自動的にエスケープされます。このうち、一重引用符 (')、二重引用符 (")、バックスラッシュ、および NULL 文字はすべてエスケープされます (バックスラッシュが追加されます)。実際、この操作は基本的に addslashes 関数を呼び出します。
マジック クオートを使用する理由
便利で速い
PHP の設計者は、最初から高速で便利なプログラミングを想定していました。たとえば、データベースに挿入する場合、Magic quotes は自動的にデータをエスケープします。これは非常に便利です。
初心者に良い
マジック クオートは、初心者がスクリプトのセキュリティ リスクを回避するのにある程度役立ちます。たとえば、保護手段がまったくないコードでは、マジック引用符を有効にすると、インジェクションの問題などの多くのリスクが軽減されます。もちろん、この方法だけではこうしたセキュリティ上の問題を完全に防ぐことはできません。
「閉じる権限がありません」
この問題に気づいていることは明らかですが、ホスト領域は完全に制御できるわけではありません。
魔法の引用符を使用しない理由
移植性 この機能がオンになっているかどうかに関係なく、その後のデータのフィルタリング操作に影響を与えるため、スクリプトの移植性に影響します。
パフォーマンスの問題 すべての外部データは取得前にエスケープされるため、間違いなく実行時のコストが増加します (すべてのデータをエスケープする必要があるわけではありません)。
混乱を引き起こす 前述したように、すべてのデータをエスケープする必要はありません。発生する可能性のある状況の 1 つは、エスケープされていないデータを取得するためにストリップスラッシュ関数「crazy」を使用する場合です。
PHP6はサポートされなくなりました
PHP の設計者は明らかに自分たちの「間違い」に気づいたので、PHP6 でそれを非推奨にしました。
マジッククオートを無効にする方法
私の意見では、php.ini 設定ファイルを使用してマジック クオートをグローバルに無効にするのが最も確実です。以下のコードを参照してください
。; 受信 GET/POST/Cookie データのマジック引用符。magic_quotes_gpc = Off; SQL からのデータ、などのマジック引用符。magic_quotes_runtime = Off; Sybase スタイルのマジック引用符 (' の代わりに ' を使用してエスケープします)。magic_quotes_sybase = Off ただし、オンライン ホストでは php.ini ファイルの変更が許可されていない場合があるため、.htaccess ファイルを使用して無効にし、次のコード
php_flag magic_quotes_gpc Off 上記は、移植されたコードの場合、magic_quotes が無効かどうかに関係なく、データの一貫性を維持する必要があります。次のコードは、
<?phpif (get_magic_quotes_gpc()) {functiontripslashes_deep($value) {$value = is_array($value) ?array_map('stripslashes_deep', $value) :stripslashes($value);return $ に役立ちます。値;}$_GET = array_map('ストリップスラッシュ_ディープ', $_GET);$_POST = array_map('ストリップスラッシュ_ディープ', $_POST);$_COOKIE = array_map('ストリップスラッシュ_ディープ', $_COOKIE);$_REQUEST = array_map('ストリップスラッシュ_ディープ' 、$_REQUEST);}