安全地将HTML内容插入到db表中

时间:2011-10-05 09:05:41

标签: php mysql

我正在使用HTML函数将html内容插入到db表中,并过滤用于过滤用户输入以防止SQL注入攻击。得到这样的输出prntscr.com/3c8ht。我有以下问题:

1)在插入和输出之前,需要从哪些函数传递HTML内容? 2)还需要什么过滤功能或是否有任何未使用的功能?

提前谢谢

function filter($data, $db)
{
    $data = $db->escape_string($data);
    $data = htmlspecialchars($data, ENT_IGNORE, 'utf-8');
    $data = strip_tags($data);
    $data = stripslashes($data);
    $data = htmlentities($data);
   return $data;
}

function html($data, $db)
{     
    $data = $db->escape_string($data);
    return $data;
}

2 个答案:

答案 0 :(得分:2)

您应该使用媒体所需的转义工具,而不仅仅是任何地方的人。

为了避免SQL注入,mysql_real_escape_string()是最小的,你需要使用的。 更好的选择是使用预准备语句和参数化查询(查看PDO扩展,自v 5.1 IIRC以来随PHP一起提供),这将是避免此类漏洞利用的最安全的选择。

将未转义的html发送到数据库不会做任何事情,因为恶意脚本当然不会被执行。 HMTL需要在OUTPUT上进行消毒,无论何时打算在页面上打印出来,都应该在需要时进行,而不是先验

要保护html,您可以使用htmlentities()作为最小步骤。您可能还需要考虑使用复杂的过滤器来替换“坏”字和坏字符的出现:这是一个更复杂的情况,需要很长时间的操作,但当然会为您提供最准确的安全级别。您可以针对此主题提出另一个问题,或在此搜索SO   Strip_tags()可能会破坏你的标记(它不再是html,更可能是纯文本),除了根本不是安全的。

答案 1 :(得分:1)

每次使用用户输入存储在数据库中时,都应使用mysql_real_escape_string()

现在,如果您检索包含换行符的长文本,请在打印数据时使用nl2br()

http://php.net/manual/en/function.mysql-real-escape-string.php