清理MySQL表格的表格数据

时间:2012-05-23 02:59:57

标签: mysql forms

如果我正在清理从表单到mysql表的代码,这会起到什么作用?应该/将要输入的数据将是学校科目和教授的名/姓......还有其他关于如何做的建议吗?

/*
Sanitize() function removes any potential threat from the
data submitted. Prevents email injections or any other hacker attempts.
if $remove_nl is true, newline chracters are removed from the input.
*/
function Sanitize($str,$remove_nl=true)
{
    $str = $this->StripSlashes($str);

    if($remove_nl)
    {
        $injections = array('/(\n+)/i',
            '/(\r+)/i',
            '/(\t+)/i',
            '/(%0A+)/i',
            '/(%0D+)/i',
            '/(%08+)/i',
            '/(%09+)/i'
            );
        $str = preg_replace($injections,'',$str);
    }

    return $str;
}    
function StripSlashes($str)
{
    if(get_magic_quotes_gpc())
    {
        $str = stripslashes($str);
    }
    return $str;
}   

5 个答案:

答案 0 :(得分:1)

我推荐PHP的PDO class。你可以这样做:

try
{
  $sql ='INSERT INTO whatever(a,b,c) VALUES(:a,:b:c);
  //or if you prefer...
  $sql ='INSERT INTO whatever(a,b,c) VALUES(?,?,?);
  $stmt = db::db()->prepare($sql);
  $stmt->execute(array(123,234,345));
}
catch(PDOException $e){library::sql_error($e,$sql);}

答案 1 :(得分:1)

感谢大家花时间提供帮助。我选择了preg_replace函数,该函数将字符限制为我希望人们使用的内容:preg_replace("~" . "[^a-zA-Z0-9\-\_\.\ ]" . "~iU", "", $string)。我还使用了mysql_real_escape_string所以我在发送到数据库之前进行了两级过滤。

答案 2 :(得分:0)

为什么不使用mysql_real_escape_string()来逃避可能导致问题的所有潜在角色?除了内置之外,它还会使用MySQL自己的mysql_real_escape_string,因此您知道您将始终了解需要为已安装的数据库进行转义的内容。

答案 3 :(得分:0)

最好的选择是使用PDO的bindValue方法:

http://www.php.net/manual/en/pdostatement.bindvalue.php

这可以排除你所有逃跑的行为。

对于表单,您还可以查看:

http://semlabs.co.uk/docs/xfl/xfl-elements/sanitise

这是一组PHP类,可以轻松处理表单,但需要一段时间才能完成。

答案 4 :(得分:0)

试试这个:

 function sanatize($value) {

            $value = preg_replace("~" . "[^a-zA-Z0-9\-\_\.]" . "~iU", "", $value);
            return $value;
    }