我正在使用PHP进行实验性社交网站。因此,会有很多用户提交的数据发送到数据库。
我曾经编写过一个自定义块脚本,只会阻止某些字符或关键字被提交。这很有用,但它有问题清单。
我听说过addslashes和mysql_real_escape_string都会这样做,但在得到一些可靠的建议之前我不想做任何事情。
我尝试过addlashes,它会添加斜杠,不能,不要等等。我不想要。
我只是想让我的数据库免受xss,html,php和javascript攻击。有什么建议吗?
答案 0 :(得分:3)
对于不了解PHP或查找有关功能的文档的人:
<
,>
和&
等字符转换为html实体,从而防范XSS。我真的没有在这里看到解释的必要性。
答案 1 :(得分:3)
在将任何内容输出回用户之前,您应该HTML转义任何内容。然后,当它输出回来时,它将是安全的。使用htmlspecialchars用于PHP。有关详细信息,请参阅What are the best practices for avoiding xss attacks in a PHP site,并阅读OWASP XSS (Cross Site Scripting) Prevention Cheat Sheet。
答案 2 :(得分:2)
到目前为止所有的好答案,我只想补充一点,你应该确保输入数据采用所需的编码 - 你还应该规范化不同类型的新换行或完全控制字符,我最终使用以下功能:
function Filter($string, $control = true)
{
$string = iconv('UTF-8', 'UTF-8//IGNORE', $string);
if ($control === true)
{
return preg_replace('~\p{C}+~u', '', $string);
}
return preg_replace(array('~\r[\n]?~', '~[^\P{C}\t\n]+~u'), array("\n", ''), $string);
}
它将从字符串中删除所有无效的UTF-8数据并规范化新行。所有控件字符(tab(\t
除外)和新行(\n
)除外)都是条带化的,如果$control == true
它们也被剥离了。
PS :从安全角度来看,这不是很有用,但有助于避免GIGO。
答案 3 :(得分:1)