ホームページ >バックエンド開発 >PHPチュートリアル >AJAX POST 変数が本番サーバーではエスケープされるのに、ローカル サーバーではエスケープされないのはなぜですか?

AJAX POST 変数が本番サーバーではエスケープされるのに、ローカル サーバーではエスケープされないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-26 13:32:03594ブラウズ

Why are My AJAX POST Variables Escaped on the Production Server But Not on the Local Server?

PHP で $_POST 変数がエスケープされるのはなぜですか?

問題:

PHP では、$_POST 変数はAJAX POST リクエストは運用サーバーではエスケープされますが、ローカル サーバーではそのまま残ります。ローカル サーバーは Windows 上で PHP 5.3.1 を実行しますが、運用サーバーは Linux 上で PHP 5.2.12 を実行します。

理由:

2 つのサーバー間の不一致は次のとおりです。おそらく、運用サーバーでマジック クオートが使用されていることが原因です。

マジック クオート:

マジック クオートは、$_GET で特定の文字を自動的にエスケープする PHP の非推奨の機能です。 、$_POST、$_COOKIE 変数を使用して、SQL インジェクションやその他の攻撃から保護します。エスケープ文字には次のものが含まれます。

  • 一重引用符 (')
  • 二重引用符 (")
  • バックスラッシュ ()
  • ヌル文字 (NUL)

解決策:

問題を解決し、両方のサーバー間で一貫した動作を確保するには、運用サーバーでマジック クオートを無効にすることができます。 php.ini でグローバルに、または set_magic_quotes_runtime() を使用してスクリプトごとに実行します。

マジック クオートを無効にすることができない場合は、取得した POST データのtripslashes() 関数を使用してスラッシュを手動で削除できます。

<code class="php">if (get_magic_quotes_gpc()) {
    $my_post_var = stripslashes($_POST["my_post_var"]);
}</code>

マジック クォートを無効にするか適切に処理することで、運用サーバー上で $_POST 変数がエスケープされなくなり、AJAX POST リクエストが正しく機能できるようになります。

以上がAJAX POST 変数が本番サーバーではエスケープされるのに、ローカル サーバーではエスケープされないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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