人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Smarty+MySQLの質問です。

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

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

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

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

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

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

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

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

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

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

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

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

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


●質問者: gelgelgel
●カテゴリ:インターネット ウェブ制作
✍キーワード:dB MySQL Pear Smarty SQLインジェクション
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tdoi
●100ポイント ベストアンサー

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


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

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

そのため、

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

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


回避法としては、

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

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

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


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

何かの参考になれば。

http://dummy

◎質問者からの返答

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

全く知りませんでした。

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ