1

如果我正在清理从表单进入 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;
}   
4

5 回答 5

1

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

于 2012-05-24T02:57:25.190 回答
1

我推荐 PHP 的PDO 类。你会做这样的事情:

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);}
于 2012-05-23T03:13:19.337 回答
0

尝试这个 :

 function sanatize($value) {

            $value = preg_replace("~" . "[^a-zA-Z0-9\-\_\.]" . "~iU", "", $value);
            return $value;
    }
于 2012-05-23T04:14:24.497 回答
0

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

于 2012-05-23T03:00:55.170 回答
0

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

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

这解决了你所有的逃避。

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

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

它是一组 PHP 类,可以更轻松地处理表单,尽管需要一段时间才能让你头脑清醒。

于 2012-05-23T03:17:20.200 回答