2012年2月19日

magic_quotes_gpcの設定がON

get_magic_quotes_gpc()関数を使って
magic_quotes_gpcの設定がONの場合、
入力フォームの情報(配列)に対して以下のようなエスケープ処理が施される。
「" → ¥"」「' → \'」「¥ → ¥¥」

stripslashes()関数でバックスラッシュを取り除く。

さらにhtmlspecialchars()関数によってHTML特殊文字は以下のように処理される。
「& → &amp;」「" → &quot;」「' → &#039;」「< → &lt;」「> → &gt;」
このことを加味して
入力フォームの文字には危険が潜んでいるので
エスケープ処理を施す。

以下、POST型とGET型の記述。

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  foreach($_POST as $key => $value) {
    if (get_magic_quotes_gpc()) {
      $value = stripslashes($value);
    }
  $value = htmlspecialchars($value);
  $_POST[$key] = $value;
  }
}
if ($_SERVER["QUERY_STRING"] != "") {
  foreach($_GET as $key => $value) {
    if (get_magic_quotes_gpc()) {
      $value = stripslashes($value);
    }
  $value = htmlspecialchars($value);
  $_GET[$key] = $value;
  }
}

※magic_quotes_gpcはPHP 5.3.0で非推奨になったので設定はOFFが推奨。
※htmlspecialchars()によって逆に文字列が崩れてしまい、ログインフォームやDB接続などがうまくいかなくなることもあるので、状況に応じてカットする。

0 件のコメント:

コメントを投稿