5

私のサーバー管理者は最近 PHP 5.3 にアップグレードしましたが、奇妙な「バグ」(または、PHP 関係者が持っている機能) が発生しています。mysql_real_escape_string明らかな安全上の理由から、文字列形式のデータのほとんどを使用していましたが、このエスケープは PHP によって既に行われているようです。

<?php

echo $_GET["escaped"];

?>

<form method="get">
    <input type="text" name="escaped" />
</form>

たとえばescape 'this test'、を入力すると、これが出力されますescape \'this test\'POSTの代わりに使用する場合も同様ですGET

これは 5.3 のアップグレードに直接関連しているのでしょうか、それとも管理者が php.ini ファイルで自動切り替えをトリガーしたのでしょうか?

また、そのままにしておく必要があります (実際にすべての get および post 変数を正しくキャッチする優れた失敗防止メカニズムである場合)、またはそれを無効にする必要があります (可能であれば!) に戻る必要がありmysql_real_escape_stringますか? 私の直感では、アプローチ 2 が最適ですが、アプローチ 1 はやや自動化されています。:)

編集:実際には、無効にする必要があります。フォーム データを収集し、何か問題があった場合 (つまり、フィールドが不足している場合) にそれをクライアント フォームに再送信することがあります。

4

4 に答える 4

12

この「機能」はとして知られており、すべての SQL インジェクション攻撃から保護するmagic_quotes_gpcわけではありませ(やaddslashesなどの入力スーパーグローバルのすべての要素で呼び出されます。これは、実際の入力/データベース エンコーディングを無視します)。したがって、これは非推奨であり、使用しないでください$_POST$_GET

公式の php マニュアルには、 php コードで元に戻すためのきちんとした方法が含まれていますが、オフにするだけで済みます。

于 2011-07-10T18:11:50.763 に答える
6

これはマジック クォートによるものです。オフにする必要があります。

そして、これをオフにする方法は次のとおりです。 http://www.php.net/manual/en/security.magicquotes.disabling.php

php.ini を使用するか、$_GETand内のすべての変数からスラッシュを削除することによって行います$_POST。明らかに前者が推奨される方法です。


.htaccessWill Martin が示唆するように、次のように変更することもできます。

php_flag magic_quotes_gpc オフ

詳細はこちら: http://php.net/manual/en/configuration.changes.php

于 2011-07-10T18:10:56.707 に答える
1

php.ini のhttp://www.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpcオプションを確認してください

于 2011-07-10T18:11:44.713 に答える
1

サーバーでマジック クォートが有効になっているよう です。無効にする方法については、http://www.php.net/manual/en/security.magicquotes.disabling.phpを参照してください。

于 2011-07-10T18:12:29.597 に答える