Php 此功能对是否适合消毒?

Php 此功能对是否适合消毒?,php,sanitize,Php,Sanitize,这是取自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);

这是取自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
数据所需的全部内容吗?考虑到来源,我担心这对初学者来说已经被简化了,我会让自己在以后很容易受到攻击


谢谢。

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

没有神奇的子弹功能来确保用户输入的安全,因为它完全取决于您如何使用它。例如,如果您有一个文本框并将其与上述函数一起使用,它将清除此字符串:

javascript:someFunction()
这不是问题。。。除非随后在链接的onclick属性中使用该用户输入。不大可能发生的当然但这是反例的证明

您必须了解用户输入的用途,它可能引入或利用哪些漏洞,然后采取适当的行动


mysql\u real\u escape\u string()
足以停止SQL注入,因此这是一个简单的问题。停止XSS要模糊得多。

不可能对传入的数据进行一般和不加区别的“清理”。它总是取决于你想用它做什么

sanitizeString()方法适用于清理页面HTML输出中显示的不可信内容(例如来自不安全表单)。没有别的了。它将删除标签等信息,并修改特殊字符

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

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


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

不要使用旧的MySQL驱动程序和
MySQL\u real\u escape\u string
,而要使用支持(例如)

htmlentities
将“”转换为其等效的HTML字符实体,因此在
htmlentities
之后调用
strip\u标记将没有任何影响


stripslashes
只有在启用了魔引号的情况下才应该调用(使用并测试此功能)。

我可以问一下我的原始帖子中编辑了什么吗?@Andrew:@Andrew:你也可以点击最后一次编辑的时间(例如,“[编辑]18小时前,“[编辑]12月30日2:00”),这是到修订历史的链接。