我只是想确认一下,因为mysql在评论中做了一些更改,比如它添加的图片HTML \"
我知道它让它变得安全但是你可以建议我吗?我首先将其保存到数据库,然后在评论框中显示。
我正在使用:
if (isset($_POST['comment-post'])) {
$comment = $_POST['comment'];
if ($id != "" && strlen(trim(preg_replace('/\xc2\xa0/',' ',$comment))) != 0) {
$add = mysql_query("UPDATE users SET comments='$comment' WHERE id='$id'");
}
}
或者我应该使用它:
if (isset($_POST['comment-post'])) {
$comment = mysql_real_escape_string($_POST['comment']);
if ($id != "" && strlen(trim(preg_replace('/\xc2\xa0/',' ',$comment))) != 0) {
$add = mysql_query("UPDATE users SET comments='$comment' WHERE id='$id'");
}
}
评论用户可以发帖的示例是:
Hello how are you?
<img src="http://i840.photobucket.com/albums/zz324/wonderfulworld1/Hearts/rt28h.gif">
答案 0 :(得分:3)
我建议停止使用Mysql_ *函数,它们已被弃用,将在以后的版本中从PHP中删除。
查看PDO或Mysqli,两者都有准备好的陈述,这将有助于解决这类问题。
答案 1 :(得分:1)
不,这不安全。 您发布的代码在运行查询时容易受到SQL injections的影响,并且在您的网页上显示评论时会出现跨站点脚本。
您应该始终使用mysqli_real_escape_string
和strip_tags
(或filter_var
)函数转发用户输入来过滤用户输入。
答案 2 :(得分:0)
mysql_real_eascape_string可防止SQL inection攻击,但不会清除数据以防止其他可能的攻击。准备好的陈述也是如此。如果您使用mysql
,则应正确转义数据。
但是,如果您要显示用户数据,则需要确保您显示的数据也是干净的。您必须保护再次标记,例如<script></script>
在输出流中出现未经过清理的内容。