PHP5.4.0 でマジッククォートは削除されました ( magic_quotes_* )

Pocket

ブログ移転作業中です。こんな記事まで移転する必要があるか悩みましたが、折角なので移転しました。今でも PHP 5.3 などは現役だと思います。

スポンサーリンク

PHP5.3 までは、php.ini などの設定でマジッククォートがオンの場合、全ての ‘ ( シングルクオート ) , ” ( ダブルクオート ), \ ( バックスラッシュ ) および NULL 文字はバックスラッシュで自動的にエスケープされます。この機能は、SQL インジェクションを防ぐために使用されていると思います。 しかし、以下の理由からマジッククオートは使用しないほうが良いです。

  • PHP5.3 で非推奨となり、PHP5.4 では、マジッククオートは PHP から削除されたため移植性に影響がでる
  • クォートしたくないものまでクォートされるので返って逆変換処理に労力を使うことがある
  • データベースやライブラリが提供するクォート処理を利用したほうが良い

詳細は、下記を参照ください。

PHP5.4.0 以降も php.ini に設定等はできますし、関連する関数も存在します。しかし、例えば get_magic_quotes_gpc 関数などは設定値に関わらず PHP5.4.0 以降では常に FALSE をリターンします。

マジッククォートの無効化

マジッククォートを無効化するには php.ini を使用するのが一般的です。 また、php.ini の書き込み権限がない時は、.htaccess に設定することもできます。

php.ini の設定例

magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

マジッククオートの代替処理 ( SQL クォート処理の実装例 )

SQL インジェクション対策としてクォート処理を実装するサンプルについては、 以下のリンクを参照ください。データベースごとにまとめてみました。

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *