在我的网站上,我有一些用户有时必须保存在数据库中的HTML内容。这样做的安全方法是什么(我不希望我的数据库处于危险之中,或者以后会看到该代码的用户,从数据库调用)。
所以我读到的是:
使用htmlentities将数据保存在数据库中,使用html_entity_decode解码数据库中的数据。这样安全吗,还是我应该使用其他东西?
答案 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
}
}