可能重复:
在 PHP 中防止 SQL 注入的最佳方法
在我的网站上,我有一些用户有时必须保存在数据库中的 HTML 内容。这样做的安全方法是什么(我不希望我的数据库处于危险之中,或者以后会看到该代码的用户从数据库中调用)。
所以我读到的是:
使用htmlentities将数据保存在数据库中,使用html_entity_decode解码数据库中的数据。这足够安全吗,还是我应该使用其他东西?
可能重复:
在 PHP 中防止 SQL 注入的最佳方法
在我的网站上,我有一些用户有时必须保存在数据库中的 HTML 内容。这样做的安全方法是什么(我不希望我的数据库处于危险之中,或者以后会看到该代码的用户从数据库中调用)。
所以我读到的是:
使用htmlentities将数据保存在数据库中,使用html_entity_decode解码数据库中的数据。这足够安全吗,还是我应该使用其他东西?
如果您使用字符串转义和/或准备好的语句,HTML 标记不会对您的数据库造成任何损害。当您将 HTML 标记显示给用户时,危险就来了,就好像有人在您要显示的标记中注入了令人讨厌的 HTML,然后您就受到了 XSS 攻击。
如果您没有转义或使用准备好的语句,那么几乎任何来自外部的数据都可能是危险的。
您可能想查看 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
}
}