使用以下命令保存用户注释是安全的:mysql_real_escape_string

时间:2013-09-22 09:34:53

标签: php

我只是想确认一下,因为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">

3 个答案:

答案 0 :(得分:3)

我建议停止使用Mysql_ *函数,它们已被弃用,将在以后的版本中从PHP中删除。

查看PDO或Mysqli,两者都有准备好的陈述,这将有助于解决这类问题。

答案 1 :(得分:1)

不,这不安全。 您发布的代码在运行查询时容易受到SQL injections的影响,并且在您的网页上显示评论时会出现跨站点脚本。

您应该始终使用mysqli_real_escape_stringstrip_tags(或filter_var)函数转发用户输入来过滤用户输入。

答案 2 :(得分:0)

mysql_real_eascape_string可防止SQL inection攻击,但不会清除数据以防止其他可能的攻击。准备好的陈述也是如此。如果您使用mysql,则应正确转义数据。

但是,如果您要显示用户数据,则需要确保您显示的数据也是干净的。您必须保护再次标记,例如<script></script>在输出流中出现未经过清理的内容。