PHPマジッククオートの被害

February 13, 2009,
tags: magic_quotes php


このエントリーをはてなブックマークに追加

うっかりやられました。。
フォームでポストされた値に対しては、マジッククオートが有効になっていたらstripslashes使ってクオートを取り除くようにしていたのですが・・・。

「応募フォーム→確認画面→DB登録」

って感じに作っていたプログラムで、確認画面から再度データをPOSTさせていたので、クオートされていました。。。
そして、そのままデータベースに登録されているので、クオートされたままのデータがDBに入っていました。。。

.htaccessが使えれば、そこでマジッククオートを無効にすればいいのですが、レンタルサーバによっては.htaccessが使えないのです。。
個人的にクオートされたままDBに登録するってのも微妙なんで、DBに登録する前に、stripslashes使ってクオートを取り除きました。
書き直すファイルが結構出てきてめんどくさかったっす。。。

でもって、再帰的にマジッククオートを解除する関数作ってみました。

/**
        * マジッククオートを再帰的に解除する
        */
        function stripslashes_array($str){
            if(!get_magic_quotes_gpc()){
                return $str;
            }

            if(is_array($str)){
                foreach($str as $key => $value){
                    $s_str[$key] = stripslashes_array($value);
                }
                return $s_str;
            }else{
                return stripslashes($str);
            }
        }

再起処理ってこんな感じでよいのでしょうか?

ちなみに、PHP6になったら、マジッククオートはなくなるそうです!PHP5.3からは非推奨だそうです。

comments powered by Disqus