正如标题所说,我想知道这两个类似的函数是否可以合并为一个:
这一个净化了一般输入:
function sanitize($input)
{
if(get_magic_quotes_gpc() == true)
{
$input = stripslashes($input);
}
return htmlspecialchars($input);
}
这一个清除了更新数据库的输入:
function sanitizeSQL($input)
{
if(get_magic_quotes_gpc() == true)
{
$input = stripslashes($input);
}
return mysql_real_escape_string(htmlspecialchars($input));
}
也许使用另一个if语句或其他东西来添加或删除*mysql_real_eescape_string((*?只是不知道该怎么做…
像往常一样,我们会提前感谢所有的帮助。
合并它们非常简单。
function sanitize($input, $sql = false) { // $sql will default to false
if (get_magic_quotes_gpc() === true) $input = stripslashes($input);
$input = htmlspecialchars($input);
return ($sql === true ? mysql_real_escape_string($input) : $input);
}
我们只是添加一个$sql
变量来说明是否需要对其进行SQL清理。
我会使用消毒SQL调用消毒。没有重复的代码,但函数名称不同。
function sanitizeSQL($input)
{
return mysql_real_esape_string(sanitize($input));
}
如果你只想调用一个方法,我会传入第二个参数:
function sanitize($input, $forSql)
{
if(get_magic_quotes_gpc() == true)
{
$input = stripslashes($input);
}
$input = htmlspecialchars($input);
if($forSql == true)
{
$input = mysql_real_escape_string($input);
}
return $input.
}
function sanitizeBoth($input, $mysqlEscape)
{
if(get_magic_quotes_gpc() == true)
{
$input = stripslashes($input);
}
$return = htmlspecialchars($input);
if ($mysqlEscape){
$return = mysql_real_escape_string($return);
}
return $return;
}
$mysqlEscape是一个开关:如果它为true,它将作为"消毒SQL"工作,如果它为false,则作为"消毒"工作。
让我提出一种不同的方法。您应该禁用magic_quotes,或者尽早删除所有get/post/cookie数据上的斜杠,如下例2所示。
不要将这部分代码用于准备HTML或SQL。当您实际构建HTML文档或SQL语句时,这应该单独完成。在这一点上,您所需要的只是HTML的htmlspecialchars
,或SQL的mysql_real_escape_string
。
不要错误地认为有一个"通用"的净化功能可以用于所有输入。事实上,最好不要把它看作是消毒。纯文本已经足够卫生了。您所做的只是对特定输出格式(HTML、SQL、CSV、PDF等(的文本进行转义。每种输出格式都有不同的转义方法,因此没有适用于所有格式的方法。这就是为什么magic_quotes是一个糟糕的主意,也是为什么它需要尽快撤销的原因。