2

这取自O'Reilly 的 Learn PHP, MySQL, and 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;
}

这是处理POSTGET数据的全部需求吗?鉴于来源,我担心这对于初学者来说已经变得愚蠢了,我会让自己在以后容易受到攻击。

谢谢你。

4

4 回答 4

4

与其使用旧的 MySQL 驱动程序 和 ,不如使用支持预准备语句mysql_real_escape_string的更现代的驱动程序(例如PDO)。

htmlentities会将 '<' 和 '>' 转换为它们等效的 HTML 字符实体,因此调用strip_tagsafterhtmlentities将没有任何影响。

stripslashes只有在启用了魔术引号时才应调用(使用get_magic_quotes_gpcandget_magic_quotes_runtime来测试)。

于 2009-12-31T01:55:32.630 回答
3

不可能普遍和不加选择地“清理”传入的数据。它总是取决于你想用它做什么。

sanitizeString()方法适用于清理您无法信任的内容(例如来自不安全的表单),这些内容将显示在您的页面的 HTML 输出中。没有其他的。它将删除诸如标签之类的信息,并会修改特殊字符。

sanitizeMySQL()方法可以做到这一点,并且可以安全地在 mySQL 查询中使用。同样,这仅在您想删除用户输入时才有用,例如留言簿或留言箱。如果您有一个带有授权用户的 CMS,您不会想要这样做。

在任何情况下都不会将此应用于所有传入变量。例如,如果您有一个通过电子邮件转发给您的订单,htmlspecialchars()会将所有特殊字符转换为实体 -&quot;在纯文本电子邮件中按字面意思(如 )显示。你不会想那样做的。

有关在我认为这是一个很好的答案的地方使用什么卫生设施的一般概述。此外,如果您要根据传入数据发送电子邮件,请查看邮件注入

于 2009-12-31T01:55:18.963 回答
1

没有灵丹妙药的功能可以让用户输入安全,因为它完全取决于你用它做什么。例如,如果您有一个文本框并将其与上述函数一起使用,它将清除此字符串:

javascript:someFunction()

这不是问题...除非您随后在链接的 onclick 属性中使用该用户输入。不太可能?当然。但这是反例证明。

您必须了解您将用户输入用于什么目的,它可能会引入或利用哪些漏洞,然后采取适当的行动。

mysql_real_escape_string()足以阻止 SQL 注入,所以这很容易。阻止 XSS 更加模糊。

于 2009-12-31T01:54:30.667 回答
0

好的开始。理想情况下,对于非自由形式的事物,您可以使用 switch 语句(或其他)中的输入来查找硬编码值以进入 SQL。这有助于防止消毒遗漏的事情。

于 2009-12-31T01:51:48.423 回答