何时使用 mysql_real_escape_string()
什么时候是使用 mysql_real_escape_string 的正确时间?
当我使用 isset(mysql_escape_string($_GET['param'])) 时是否应该使用它,
当我使用 $foo = mysql_real_escape_string($_GET['bar']); 时是否应该使用它?
谢谢
When is the correct time to use mysql_real_escape_string?
Should I be using it when I use isset(mysql_escape_string($_GET['param'])),
Should I be using it when I use $foo = mysql_real_escape_string($_GET['bar']);
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
当使用字符串文字构建 SQL 查询时,您需要调用此函数。
您不应该在其他地方调用它。
调用此函数的目的是防止您执行像 SELECT * FROM Students WHERE Name = 'Robert'); 这样的 SQL删除表格学生;--'.
mysql_real_escape_string
将对'
字符进行转义,以便将恶意字符串完全视为字符串。You need to call this function when building SQL queries with string literals.
You should not call it anywhere else.
The point of calling this function is to prevent you from executing SQL like
SELECT * FROM Students WHERE Name = 'Robert'); DROP TABLE Students;--'
.mysql_real_escape_string
will escape the'
character so that the evil string is treated entirely as a string.每当您不信任在 mysql 查询中插入的数据时,就应该使用它来防止 sql 注入。例如所有用户表单数据。
在你的第一个例子中:不。
第二个示例:是的,如果您要在查询中使用 $foo 变量。
You should use it whenever you don't trust the data you are inserting in a mysql query to prevent sql injections. For example all user forms data.
In your first example: no.
Second example: yes, if you are going to use the $foo variable in a query.
每当您将数据插入数据库查询(POST/GET 数据)时都应该使用它,但如果您只需要检查数据则不应使用它。
You should use it whenever you are inserting data into a database query (POST/GET data), but not if you just need to check the data.
每当您想要在查询中使用来自用户的输入时,您就可以使用 mysql_real_escape_string。
使用方法如下:
这是不起作用的示例代码:
损坏的代码
在示例中,我可以通过输入任何密码来登录您的系统,并且
用户或 (1=1) --
。这将使查询读取:并将批准所有登录,因为密码永远不会被检查。
使用 mysql_query 时,一次只能执行一条 SQL 语句,因此:
将导致错误,因为不能是
;
之后的部分。然而,此代码将起作用:
危险
因为改进 mysqli_query 确实允许一次性执行两个或多个语句。
You use mysql_real_escape_string whenever you have input from a user that you want to use in a query.
Here's how to use it:
Here's example code that doesn't work:
Broken code
In the example I can login into your system by entering any password whatsoever and
user or (1=1) --
. This will make the query to read:And will approve all logins because the password never gets checked.
When using mysql_query, you can only ever execute one SQL-statement at a time, so:
Will result in an error, because cannot be a part after the
;
.This code however will work:
Danger
Because the improved mysqli_query does allow two or more statements to be executed in one go.