php – 需要帮助了解MySQL注入

前端之家收集整理的这篇文章主要介绍了php – 需要帮助了解MySQL注入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php我得到:

sql injection refers to the act of
someone inserting a MysqL statement to
be run on your database without your
knowledge. Injection usually occurs
when you ask a user for input,like
their name,and instead of a name they
give you a MysqL statement that you
will unknowingly run on your database.

我读了整篇文章,但我仍然有一些重大的问题,了解它是什么,如何做到这一点.

在第一个例子中,他们会看到什么?

据我所知,如果我真的回应$name,将会看到所有的名字,因为它将永远是“真的”我是正确的吗?

另一件我不明白的是MysqL的注入问题是用MysqL_real_escape_string()解决的,还有更多的.

我真的没有得到的是MysqL_real_escape_string()是为了解决这个问题,为什么这不是自动完成的,我的意思是有一个原因,你必须添加每次MysqL_real_escape_string(),有什么情况下,你应该使用那么这就是为什么他们不自动

MysqL不会自动转义,因为您自己构建查询字符串.例如:
$query = 'SELECT * FROM users WHERE name="' . $name . '"';

你只需传递存储在$query中的原始字符串,这对sql注入是开放的.例如,如果$name是[something“OR”1 = 1],则查询字符串的结尾为:

$query = 'SELECT * FROM users WHERE name="something" OR "1=1"

这将从用户表返回每个用户.这就是为什么你需要逃避价值观.但是,如果使用PDO,如果使用绑定功能,则可以为您完成.这是一个2步的过程,准备查询,然后将数据/变量绑定到占位符.在PDO中,您的查询字符串将如下所示:

$query = 'SELECT * FROM users WHERE name=":name"';
$bindings = array('name'=>'something');
prepare($query);
execute($bindings);

然后,会为您自动转义.

猜你在找的PHP相关文章