こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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>
でもタグの内容通りの結果が表示されてしまいます。

投稿日時 - 2009-04-17 18:27:56

QNo.4887025

すぐに回答ほしいです

質問者が選んだベストアンサー

もうお分かりだと思いますが
SQLインジェクション対策であれば
プレイスホルダを使用するのが一般的です。

PDOかMDB2か何をお使いになっているか分かりかねますが
それぞれにありますので、検索してみてください。

投稿日時 - 2009-04-24 02:15:17

お礼

やってみます。ありがとうございました。

投稿日時 - 2009-05-05 16:08:39

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.1

関数GetSQLValueString内部で既にmysql_real_escape_stringによる
エスケープがされているのでhtmlspecialcharsは不要です。

また、htmlspecialcharsはSQLインジェクション対策のようなセキュリティ
として使うものではないです。

投稿日時 - 2009-04-18 08:26:08

お礼

ありがとうございました。大変参考になりました。

投稿日時 - 2009-04-19 10:09:48

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-