我想知道在将输入数据插入mysql数据库之前最好的方法是什么。
有很多功能:trim
,addslashes
,mysql_real_escape_string
等等。
此刻我正在使用这个简单的功能:
function filter($var){
$data = preg_replace('/[^a-zA-Z0-9]/','',$var);
$data = trim(addslashes($data));
return $data;
}
最好的方法是什么?感谢
答案 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)
最好的事情是做多件事:
验证是检查您所获得的数据是否有意义。例如,如果您期望出生日期,您可以检查格式是否正确,甚至可能是日期是否有意义。这不仅具有安全性优势,还可以防止错误数据的一些(并非全部)错误。那里的工具取决于案例,正则表达式(preg_match)通常是一个不错的选择。
通常不需要清理数据,但很好,例如,如果用户输入某些值,则使用trim()来分割某些空格,这可能是复制和粘贴等错误。这没有任何安全优势,但可以提高数据的整体质量。哪个好。
这两件事都应该在你的脚本中尽早完成。虽然“早期”取决于你的架构。有时候首先清理一个验证或者立即清理它(preg_replace)
是有意义的然后,当将数据发送到数据库或将其放入HTML或任何这些东西时,oyu必须根据您正在使用的系统将其转义。您应该对所有数据执行此操作,即使您事先验证了格式以确保安全。在与mysql交谈时,这些是real_escape_string函数,例如,对于HTML,它是htmlentities()或htmlspecialchars()。对于数据库,也可以查看准备好的语句,PDO-> prepare + execute()或mysqli-> prepare()+ execute()