PHP:将其插入到mysql数据库
明确之前输入的数据我不知道什么是将它插入MySQL数据库之前CELAR输入数据的最佳方式。 有很多功能:trim
,addslashes
,mysql_real_escape_string
等等。 这时我使用这个简单的功能:PHP:将其插入到mysql数据库
function filter($var){
$data = preg_replace('/[^a-zA-Z0-9]/','',$var);
$data = trim(addslashes($data));
return $data;
}
什么是做到这一点的最好方法是什么?由于
我建议你看一看prepared statements是非常保护您免受SQL注入的所有形式。
到预处理语句的参数不需要用引号括起来;驱动程序自动处理这个。如果应用程序独占使用预准备语句,开发人员可以确保不会发生SQL注入(但是,如果正在使用未转义的输入构建查询的其他部分,则仍然可以执行SQL注入)。
出于安全原因,使用mysql_real_escape_string()就足够了。另一种方法是使用准备好的语句。
但你应该检查你在你的数据库要在什么类型的信息。您可以使用几种函数和语言结构:类型转换,filter_*() functions,int_val(),abs(),trim()等等。
最好的办法是做多件事情:
- 验证数据
- 干净的数据
- 逃生日期
验证是检查数据是否你已经有了品牌任何意义。例如,如果你预计出生日期,你检查格式是否正确,甚至可能是否意味着日期。这不仅有安全方面的好处,而且可以防止一些(不是全部)错误的数据错误。那里的工具取决于案例,正则表达式(preg_match)通常是一个不错的选择。
清理数据通常不是真的需要,但很好,例如,如果用户键入某个值,则使用trim()来分割一些空格,这可能是复制和粘贴等错误。这没有安全上的好处,但提高了数据的整体质量。这很好。
的这些东西都应该在你的脚本月初完成。虽然“早”取决于你的建筑。有时这是有道理的,先清理一个验证,然后立即做(preg_replace)
然后,当发送数据到数据库或将其放入HTML或任何这些东西oyu必须相应地转移到系统正在使用。您应该为所有数据做到这一点,即使您事先确认了格式的安全性。当与mysql交谈时,这些是real_escape_string函数,例如,对于HTML,它是htmlentities()或htmlspecialchars()。对于数据库来说,它也是一个好主意,也可以查看准备好的语句,或者PDO-> prepare + execute()或mysqli-> prepare()+ execute()
这根本不是一个有用的方法: ,并没有完全防止SQL注入。你正在使用哪个mySQL库? –
'addslashes()'在这种情况下是多余的。另外,如果您的应用程序接受unicode输入,请为数据库中的b0rken条目加上自己的支持。 –
您应该根据输入数据的类型对输入数据进行清理 - 如果它必须是正整数,或者应该能够包含一个减号?你不能有一个通用的解决方案。 – Narf