在数据库中保存HTML - htmlentities

时间:2012-07-29 08:56:26

标签: php mysql

  

可能重复:
  Best way to prevent SQL Injection in PHP

在我的网站上,我有一些用户有时必须保存在数据库中的HTML内容。这样做的安全方法是什么(我不希望我的数据库处于危险之中,或者以后会看到该代码的用户,从数据库调用)。

所以我读到的是:

使用htmlentities将数据保存在数据库中,使用html_entity_decode解码数据库中的数据。这样安全吗,还是我应该使用其他东西?

2 个答案:

答案 0 :(得分:5)

如果您正在使用字符串转义和/或预处理语句,则HTML标记不会对您的数据库造成任何损害。当您向用户显示HTML标记时会出现危险,就好像有人将恶意HTML注入您要显示的标记,然后您手上就会受到XSS攻击。

如果你没有逃避或使用准备好的陈述,那么几乎所有来自外部的数据都是危险的。

答案 1 :(得分:0)

您可能希望查看PHP函数mysql_real_escape_string() ...此帖更多内容:strip_tags enough to remove HTML from string?

这是一个例子......

// scrub string ... call with sanitize($blah,1) to allow HTML
function sanitize( $val, $html=0 ) {
    if (is_array($val)) {
        foreach ($val as $k=>$v) $val[$k] = sanitize($v, $html);
        return $val;
    } else {
        $val = trim( $val );
        if (!$html) {
            $val = strip_tags($val);
            $pat = array("\r\n", "\n\r", "\n", "\r");
            $val = str_replace($pat, '<br>', $val); // newlines to <br>
            $pat = array('/^\s+/', '/\s{2,}/', '/\s+\$/');
            $rep = array('', ' ', '');
            $val = preg_replace($pat, $rep, $val); // remove multiple whitespaces
        }
        return mysql_real_escape_string($val); // escape stuff
    }
}