php:在将数据插入mysql数据库之前清除输入数据

时间:2011-09-17 13:53:12

标签: php mysql database variables clear

我想知道在将输入数据插入mysql数据库之前最好的方法是什么。 有很多功能:trimaddslashesmysql_real_escape_string等等。 此刻我正在使用这个简单的功能:

function filter($var){
    $data = preg_replace('/[^a-zA-Z0-9]/','',$var);
    $data = trim(addslashes($data));
    return $data;
}

最好的方法是什么?感谢

4 个答案:

答案 0 :(得分:1)

为了安全起见,在处理mysql时,mysql_real_escape_string() - 总是使用它。总是

答案 1 :(得分:1)

出于安全原因,使用mysql_real_escape_string()就足够了。另一种方法是使用预准备语句。

但是你应该检查数据库中你想要什么类型的信息。您可以使用几种函数和语言结构:Typecasts,filter_*() functions,int_val(),abs(),trim()等等。

答案 2 :(得分:0)

我建议你看看prepared statements几乎可以保护你免受所有形式的SQL注入。

  

不需要引用准备语句的参数;驱动程序自动处理这个。如果应用程序专门使用预准备语句,开发人员可以确保不会发生SQL注入(但是,如果使用非转义输入构建查询的其他部分,仍然可以进行SQL注入)。

答案 3 :(得分:0)

最好的事情是做多件事:

  1. 验证数据
  2. 清理数据
  3. 逃生日期
  4. 验证是检查您所获得的数据是否有意义。例如,如果您期望出生日期,您可以检查格式是否正确,甚至可能是日期是否有意义。这不仅具有安全性优势,还可以防止错误数据的一些(并非全部)错误。那里的工具取决于案例,正则表达式(preg_match)通常是一个不错的选择。

    通常不需要清理数据,但很好,例如,如果用户输入某些值,则使用trim()来分割某些空格,这可能是复制和粘贴等错误。这没有任何安全优势,但可以提高数据的整体质量。哪个好。

    这两件事都应该在你的脚本中尽早完成。虽然“早期”取决于你的架构。有时候首先清理一个验证或者立即清理它(preg_replace)

    是有意义的

    然后,当将数据发送到数据库或将其放入HTML或任何这些东西时,oyu必须根据您正在使用的系统将其转义。您应该对所有数据执行此操作,即使您事先验证了格式以确保安全。在与mysql交谈时,这些是real_escape_string函数,例如,对于HTML,它是htmlentities()或htmlspecialchars()。对于数据库,也可以查看准备好的语句,PDO-> prepare + execute()或mysqli-> prepare()+ execute()