这取自 O'Reilly的学习PHP,MySQL和Javascript :
function sanitizeString($var)
{
$var = stripslashes($var);
$var = htmlentities($var);
$var = strip_tags($var);
return $var;
}
function sanitizeMySQL($var)
{
$var = sanitizeString($var);
$var = mysql_real_escape_string($var);
return $var;
}
这是否需要处理POST
和GET
数据?鉴于消息来源,我担心这对于初学者来说是愚蠢的,而且我以后容易受到攻击。
谢谢。
答案 0 :(得分:4)
使用支持prepared statements的更现代的驱动程序(例如PDO),而不是使用旧的MySQL驱动程序和mysql_real_escape_string
。
htmlentities
会转换'&lt;'和'&gt;' <= 1}}在strip_tags
之后调用htmlentities
将不会产生任何影响。
stripslashes
(使用get_magic_quotes_gpc
和get_magic_quotes_runtime
进行测试)。
答案 1 :(得分:3)
通常不加区别地“清理”传入的数据是不可能的。它总是取决于你想用它做什么。
sanitizeString()方法适用于清除您不能信任的内容(例如,来自不安全的表单),该内容将显示在您网页的HTML输出中。 没有别的。它会删除标签等信息,并会修改特殊字符。
sanitizeMySQL()方法可以做到这一点,并且可以安全地在mySQL查询中使用。同样,仅当您要删除用户输入时,此功能才有用。用于留言簿或留言箱。如果您的CMS具有授权用户,则您不希望这样做。
在任何情况下都不会将此应用于所有传入变量。如果您有一个订单,例如,通过电子邮件转发给您,htmlspecialchars()
会将所有特殊字符转换为实体 - 在纯文本E中按字面显示(如"
) -邮件。你不会想那样做。
关于我认为使用什么卫生设施的概述this是一个很好的答案。此外,如果您要根据传入数据发送电子邮件,请查看Mail injections。
答案 2 :(得分:1)
没有灵丹妙药功能可以使用户输入安全,因为它完全取决于你用它做什么。例如,如果您有一个文本框并将其与上述函数一起使用,它将清除此字符串:
javascript:someFunction()
这不是问题...除非您在链接的onclick属性中使用该用户输入。不可能?当然。但这可以通过反例来证明。
您必须了解您正在使用用户输入的内容,可能引入或利用的漏洞,然后采取适当的行动。
mysql_real_escape_string()
足以阻止SQL注入,因此这是一个明智的选择。停止XSS更加含糊不清。
答案 3 :(得分:0)
良好的开端。理想情况下,对于非自由格式的东西,您可以在switch语句(或其他)中使用输入来查找硬编码值以进入SQL。这有助于防止消毒过程中遗漏的东西。