php中的mysql_real_escape_string,在哪里使用它?

时间:2015-07-09 06:25:44

标签: php mysql

我刚刚了解了mysql_real_escape_string避免MySQL注入的重要性。所以我在php的注册表中使用了这个。这就是我得到的,

$password_string = mysql_real_escape_string($_POST['PASSWORD']);
$username = mysql_real_escape_string($_POST['USERNAME']);
$fname = mysql_real_escape_string($_POST['FNAME']);
$mname = mysql_real_escape_string($_POST['MNAME']);
$lname = mysql_real_escape_string($_POST['LNAME']);

问题:我是否还需要在仅验证数据库中条目的表单上使用mysql_real_escape_string?或者仅在将数据插入数据库时​​才有用?我问这个是因为我还有一个验证表,其中用户将输入数据以查看数据库中是否存在这些记录。我还需要mysql_real_escape_string来保证安全吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

mysql_real_escape_string用于在执行查询之前从数据中转义特殊字符(可能会破坏查询)。它应与SELECT , INSERT , UPDATE, DELETE一起使用。

假设您从数据库中选择数据:SELECT * from table WHERE id='1' and instead of 1我们有“1”,这会破坏您的查询。 :SELECT * from table WHERE id='1''

在新版本的PHP中也弃用mysql_real_escape_string,请使用mysqli并尝试使用PDO

答案 1 :(得分:2)

一般情况下,如果这些字符串没有字面定义且完全在您的控制之下,您必须处理以某种方式注入sql语句的所有字符串。简化你可以说出来自客户端的所有内容,无论它是在那里可见还是隐藏,无论是输入字段还是其他一些交互方式。 Everything 可以在客户端进行更改或操作。所以永远不要相信你从那里收到任何东西

甚至有必要处理源自服务器端的某些字符串。或者,显然,从远程系统等其他数据源中检索数据,您读取的文件或,您刚读取的数据库条目。

唯一可以考虑保存的东西是常量值,如文字字符串,数字,定义。但即使在这里你也要注意它们在sql中不包含任何具有特殊含义的字符。所以,如果有疑问,那就逃避吧。

那说......

您使用的旧版mysql扩展程序(" mysql函数")很久以前就已被弃用。它不应再被使用了。请考虑将您的代码移植到较新的mysqli扩展程序或PDO。两者都通过准备好的陈述提供更好的保护。和"参数绑定"。两种备选方案都有很好的Web文档,您可以找到许多教程和示例供其使用。