プロが教えるわが家の防犯対策術!

素朴な疑問です。。

SQLインジェクション?の対策でSQLにINSERT時にmysql_real_escape_stringを使っています。

「テスト\」というデータをINSERTをすると
DBには「テスト\\」で入ります。

そのまま取り出してしまうと「テスト\\」で出力されるのですが。

このときの出力時の処理はstripslashes()を使っているのでしょうか?

他にもっと簡単な方法等があれば教えてくださいm(__)m

A 回答 (3件)

>php.iniでOFFになっております。


それなら、問題なさそうですね。何でだろう?

>mysql_real_escape_stringを使ってINSERTしたときに\が付いたままDBに入るのはおかしいということでしょうか?
私のところでは、発生しないですね。

もしかして、mysql_real_escape_stringを2回通してしまってるとかないですか?

もし差し支えなかったら、ソースを見られれば、もうすこしヒントになるかもしれません。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

申し訳ないです・・・
勘違いをしておりました。

おっしゃるとおりmysql_real_escape_stringを2回通していることになっていました。
PearのDB.phpを使っていたのですが、DB.phpにはmysql_real_escape_stringがないと思い込んでしまい・・・

$con->query("INSERT INTO tb VALUES(?)", array(mysql_real_escape_string($val)));

こんな感じになっていました。
お恥ずかしいです・・・

お礼日時:2008/10/30 13:58

ANo.1さんの指摘しているようにマジッククォートが有効になっている可能性が非常に高いです。



>magic_quotes_gpc はOFFにしてまして、
どのような方法でOFFにしてますか。ini_setでセットしたりしてないでしょね?

念のため phpinfo で再度以下の内容を確認してみてください。
magic_quotes_gpc ⇒onになってるとGET/POST/COOKIEの値が加工される。
         kaz33さんの言う通りDB内に加工された状態で値が
         入っているのなら、これがonになってる可能性高。
magic_quotes_runtime⇒onになってると、DBから取り出すときに、
         上記のような加工がされるので、これも要注意。

この回答への補足

回答ありがとうございます!

php.iniでOFFになっております。
phpinfo()でも確認しました。

magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off

mysql_real_escape_stringを使ってINSERTしたときに\が付いたままDBに入るのはおかしいということでしょうか?

補足日時:2008/10/28 10:56
    • good
    • 0

http://oshiete1.goo.ne.jp/qa4135755.html でも、似た質問に答えた覚えがあるのですけどmysql_real_escape_stringの前に、magic_quotes_gpc で既にescape されているのでは?

参考URL:http://jp.php.net/manual/ja/function.mysql-real- …

この回答への補足

回答ありがとうございます。

magic_quotes_gpc はOFFにしてまして、
mysql_real_escape_stringを使用しなければ「テスト\」でデータがINSERTされます。

mysql_real_escape_stringを使うと「テスト\\」でINSERTされ、
SELECTで取り出したとき「テスト\\」になりますので・・・

stripslashes()を使うしかないですよね・・・?

補足日時:2008/10/24 17:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!