例如,此代码不会转义数据库注释的字符串:
if ($_POST['comment']) {
$comment = mysql_real_escape_string(htmlentities($_POST['comment_txt']));
$comment_insert = mysql_query("UPDATE msgs SET msg='$comment' WHERE user='$username'")
or die;
}
但是这个会:
if ($_POST['comment']) {
$comment_p = $_POST['comment_txt'];
$comment = mysql_real_escape_string(htmlentities($comment_p));
$comment_insert = mysql_query("UPDATE msgs SET msg='$comment' WHERE user='$username'")
or die;
}
为什么呢?为什么我不能逃避$ _POST值?为什么我必须为$ _POST定义新的$变量来逃避它?这是安全老虎钳。我将在某个时候转向PDO,但目前我仍然坚持使用旧的mysql API。
答案 0 :(得分:3)
试试这个,它可能对你有帮助:
$comment = mysql_real_escape_string(htmlentities($_POST['comment_txt'], ENT_QUOTES, "UTF-8"));
从这里查看详细信息: PHP $_POST doesn't take accents
答案 1 :(得分:0)
这是错的。您之前不必将$_POST
数组中的值放入变量中,它也可以直接使用$_POST
值
考虑使用mysqli
或PDO
代替mysql
。