ここから本文です

いつもおせわになっています。 いま、会員せいのサイトをPHPにて制作中なのですが...

gac********さん

2010/10/1323:31:38

いつもおせわになっています。
いま、会員せいのサイトをPHPにて制作中なのですが
ちょっとこまったことになっています。
まず、IDやPASSなど必要項目を入力して新規で会員登録を行います。
これは問題ないのです。

しかしながらやはり会員登録した後でも個人情報の修正はどのサイトでも可能だと思います。

そのため各個人ページから個人情報の編集をできるようにしたところ
個人情報の入力欄<input type=text・・・・・・・・/>のタグの部分ですね。
ここに、XSSなどの危険性を考えphpの組み込み関数のhtmlentitiesで入力内容をエスケープしようとしたのですが
このhtmlentities($sample,ENT_QUOTES)という具合にエスケープ処理をあたえたところどうやら
sql = UPDATE tablename SET logpass = '1111' ,name= 'エスケープした変数' WHERE logid = '対象のID'
このMysqlのデーターを更新するsql文が文字化けしてしまうのです。

これは直接、エスケープしない変数をSQL分の中に使ってやると文字化けはしません。
その代わり<や>が生きているままですが・・・・・・。
これはいったいどうすればhtmlentitiesを使いつつ文字化けを防ぐことができるのでしょうか?

もちろんjavascriptなどの正規表現を使いある程度は防ぐことはできるでしょうが、
このまま解決しないままにするのは気分が悪かったのでここで質問しました。

ちなみにutf8_encode関数をつかってUTF-8に文字列を変換してSQLに使っても文字化けは直りませんでした。

htmlentitiesの使いようしだいだとは思うのですが・・・・・。

閲覧数:
303
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

tez********さん

2010/10/1402:11:22

htmlspecialchars() はブラウザ出力時に使うもので、不正な入力への対策として用いるものではないのでは?
データベースに悪さをする様なデータであれば、DB挿入時にそれに対する処理をしておくのであって、入力時にやってしまうと元に戻せなかったり色々トラブルの元ではないでしょうか?

こちらの記事が面白いです。参考になるのでは?

http://takagi-hiromitsu.jp/diary/20051227.html
http://takagi-hiromitsu.jp/diary/20060115.html
http://takagi-hiromitsu.jp/diary/20061104.html
http://takagi-hiromitsu.jp/diary/20070203.html
http://journal.mycom.co.jp/articles/2005/07/12/wasf/

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる