現在の位置: ホーム> 最新記事一覧> get_magic_quotes_gpc関数を使用して、魔法の引用が有効になっているかどうかを判断する方法は?ベストプラクティス分析

get_magic_quotes_gpc関数を使用して、魔法の引用が有効になっているかどうかを判断する方法は?ベストプラクティス分析

gitbox 2025-06-10

PHPの歴史では、Magic QuotesはかつてSQLインジェクションなどのセキュリティ問題を防ぐために、GET、投稿、およびCookieからのデータの処理を自動的に追加するデフォルト機能でした。ただし、便利さをめぐる混乱は利便性よりも多いため、魔法の引用はPHP 5.4.0から完全に削除されました。

それにもかかわらず、いくつかの古いシステムを維持する場合、PHP 5.3以下にまだ遭遇する可能性があります。魔法の引用がオンになっているかどうかを判断することが非常に重要です。この記事では、get_magic_quotes_gpc()関数を使用して判断を下し、対応するベストプラクティスの提案を提供する方法を紹介します。

1。get_magic_quotes_gpc()関数の紹介

get_magic_quotes_gpc()は、 magic_quotes_gpcが有効になっているかどうかを判断するために、phpによって提供される組み込み関数です。その返品値はブール値です:

  • 魔法の引用が有効になっていることを示すためにtrueを返します。

  • falseを返すということは、魔法の引用が無効になっていることを意味します。

サンプルコード:

 if (get_magic_quotes_gpc()) {
    echo "魔法の引用がオンになっています";
} else {
    echo "魔法の引用は閉じられました";
}

「未定義の関数」などの関数を実行するときにエラーメッセージを受信した場合、PHPバージョンが5.4よりも高く、魔法の引用が削除されていることを意味します。

2。なぜ魔法の引用を判断する必要があるのですか?

魔法の引用の当初の意図は良いですが、実際にはデータの繰り返しの脱出を引き起こします。開発者は、動作環境に基づいてストリップスラッシュ()を手動で処理するかどうかを動的に判断する必要があります。例えば:

 $user_input = $_POST['username'];

if (get_magic_quotes_gpc()) {
    $user_input = stripslashes($user_input);
}

このコードにより、 $ user_inputのデータが魔法の引用のために冗長に逃げられないことを保証します。これにより、その後の統一処理が容易になります。

3。ベストプラクティス:ユーザー入力の統一処理

最も推奨される方法は、毎回判断するのではなく、入り口ですべてのGPCデータを均一に処理することです。

 function strip_magic_quotes(&$array) {
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            strip_magic_quotes($array[$key]);
        } else {
            $array[$key] = stripslashes($value);
        }
    }
}

if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
    strip_magic_quotes($_GET);
    strip_magic_quotes($_POST);
    strip_magic_quotes($_COOKIE);
}

この方法により、アプリケーション内のすべてのユーザー入力データが最初から「精製」され、その後の論理処理が簡素化されます。

4。提案:魔法の引用トラップを避けるためにPHPをアップグレードします

互換性は上記の方法を使用して処理できますが、最良の解決策はPHPバージョンをアップグレードすることです。モダンなPHPフレームワーク(Laravel、Symfonyなど)は、もはや魔法の引用をサポートしたり、頼ったりしません。以下など、データフィルタリングとセキュリティ制御のためのより完全な方法があります。

  • filter_input()およびその他の入力フィルター関数を使用します。

  • PDO結合パラメーターを使用して、SQL注入を防ぎます。

  • HTML出力にはhtmlspecialchars()を使用します。

5.推奨されるデバッグ補助ツール

古いPHPシステムをデバッグするときは、単純なデバッグスクリプトを使用して、現在の環境が魔法の引用でオンになっているかどうかをすばやく判断できます。

 echo '<pre>';
echo 'magic_quotes_gpc: ' . (get_magic_quotes_gpc() ? 'ON' : 'OFF') . PHP_EOL;
echo 'Sample $_GET: ' . print_r($_GET, true);
echo '</pre>';

スクリプトを展開した後、次のようなURLにアクセスします。

 http://gitbox.net/debug.php?name=O\'Reilly

出力が次のとおりです。

 name => O\\'Reilly

つまり、魔法の引用が有効になっていることを意味し(バックスラッシュが自動的に追加されます)、ストリップスラッシュ()が必要です。