Smarty+MySQLの質問です。


コメントなどの改行のある情報をINSERTするとDBには

------------------------------------------------------------
コメント

コメント
------------------------------------------------------------

と改行されたデータが登録されるのですが、

PEAR::Authで『$myAuth->addUser』を使って以下のようにコメントを
挿入すると

$myAuth->addUser($ユーザー,$パスワード,array("コメント"=>$コメント);

------------------------------------------------------------
コメント\r\n\r\nコメント
------------------------------------------------------------

のように登録されてしまいます。

途中でSQLインジェクション対策として
『mysql_real_escape_string』を使用してエスケープしているので
これを外すと正常に登録されますが、危険なので他に良い方法が
あれば教えていただけますでしょうか。(INSERTの場合は問題ありません)

DBで難しい場合はWEB上で正常に表示できれば問題ありません。

例:<!--{$コメント|nl2br}-->←こんな感じで

お分かりになる方いらっしゃいましたら、
ご教授宜しくお願い致します。

できればなぜこういった違いが起こるのか原因も教えていただけると
嬉しく思います。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2009/04/07 11:49:43
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:tdoi No.1

回答回数174ベストアンサー獲得回数75

ポイント100pt

実際に動作させて見たわけではないので、多少違う部分があるかもしれませんが、


原因は、PEAR::Authのソースを見ればすぐ分かります。

addUser()の中で、$コメントに相当する部分を、PEAR::DBのquoteSmart()を使ってクオートしています。

そのため、

実データ→自前のmysql_real_escape_string()で処理→quoteSmart()で処理

という結果を経る為、SQL文を自前で作成した場合と異なるデータが挿入されます。


回避法としては、

1.SQLインジェクション対策はPEAR::DBに任せる

2.DB内は、\nと格納して、読み出した後に改行コードに置換する

がてっとり早いかと思います。


どちらがいいかはその他の構造との兼ね合いもありますが、他の部分でもSQL文を直に扱っているのであれば、2の方が無難かなと思います。

何かの参考になれば。

http://dummy

id:gelgelgel

PEAR::Authでもクオートしてくれているとは

全く知りませんでした。

他の部分とは兼ね合っていないので1の方法で

解決させていただきました。

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

2009/04/07 11:49:12

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません