1

可能重复:
在 PHP 中防止 SQL 注入的最佳方法

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

所以我读到的是:

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

4

2 回答 2

5

如果您使用字符串转义和/或准备好的语句,HTML 标记不会对您的数据库造成任何损害。当您将 HTML 标记显示给用户时,危险就来了,就好像有人在您要显示的标记中注入了令人讨厌的 HTML,然后您就受到了 XSS 攻击。

如果您没有转义或使用准备好的语句,那么几乎任何来自外部的数据都可能是危险的。

于 2012-07-29T09:02:03.450 回答
0

您可能想查看 PHP 函数mysql_real_escape_string()……这篇文章中的更多内容:strip_tags 足以从字符串中删除 HTML?

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

// 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
    }
}
于 2012-07-29T09:04:11.407 回答