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(),有什么情况下,你应该使用那么这就是为什么他们不自动化
$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);
然后,会为您自动转义.