0

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

3 回答 3

3

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

查看 PDO 或 Mysqli,它们都已准备好语句,这将帮助您解决此类问题。

于 2013-09-22T09:36:52.043 回答
1

不,这不安全。您发布的代码在运行查询时容易受到SQL 注入的影响,并且在您的页面上显示评论时容易受到跨站点脚本攻击。

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

于 2013-09-22T09:42:15.467 回答
0

mysql_real_eascape_string 可防止 SQL 注入攻击,但不会针对其他可能的攻击对数据进行清理。准备好的语句也是如此。如果您正在使用mysql,您应该正确转义您的数据。

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

于 2013-09-22T09:43:59.383 回答