- ベストアンサー
htmlspecialcharsについて(セキュリティ)
PHP5&MySQL5(OS:XP)で、テキストボックスに文字をいれ、DBに書き込む処理を作成しています。 「htmlspecialchars」を利用してセキュリティをかけたいのですが、htmlspecialcharsを使っても使わなくても同じ結果(セキュリティがきかない)が出てきてしまいます。 何が理由がお分かりの方、教えていただけると助かります。 ---ソース if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "formComment")) { $insertSQL = sprintf("INSERT INTO comment_table (entry_id, name, email, url, `comment`) VALUES (%s, %s, %s, %s, %s)", GetSQLValueString($_POST['entry_id'], "int"), GetSQLValueString($_POST['name'], "text"), GetSQLValueString($_POST['email'], "text"), GetSQLValueString($_POST['url'], "text"), GetSQLValueString($_POST['comment'], "text")); を if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "formComment")) { $insertSQL = sprintf("INSERT INTO comment_table (entry_id, name, email, url, `comment`) VALUES (%s, %s, %s, %s, %s)", GetSQLValueString(htmlspecialchars($_POST['entry_id']), "int"), GetSQLValueString(htmlspecialchars($_POST['name']), "text"), GetSQLValueString(htmlspecialchars($_POST['email']), "text"), GetSQLValueString(htmlspecialchars($_POST['url']), "text"), GetSQLValueString(htmlspecialchars($_POST['comment']), "text")); に変えています。 また、$_POST['comment']の入力文字は、 <script type="text/Javascript">window.alert('Javascriptが実行されました');</script> でも <iframe width="500" height="250" src="http://book.xxxx.co.jp/"></iframe> でもタグの内容通りの結果が表示されてしまいます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
もうお分かりだと思いますが SQLインジェクション対策であれば プレイスホルダを使用するのが一般的です。 PDOかMDB2か何をお使いになっているか分かりかねますが それぞれにありますので、検索してみてください。
その他の回答 (1)
- t140
- ベストアンサー率39% (59/150)
関数GetSQLValueString内部で既にmysql_real_escape_stringによる エスケープがされているのでhtmlspecialcharsは不要です。 また、htmlspecialcharsはSQLインジェクション対策のようなセキュリティ として使うものではないです。
お礼
ありがとうございました。大変参考になりました。
お礼
やってみます。ありがとうございました。