Tru*_*ufa 9 php mysql security sql-injection
从http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php我得到:
SQL注入是指某人在您不知情的情况下插入MySQL语句以在您的数据库上运行的行为.注入通常发生在您询问用户输入时,例如他们的姓名,而不是名称,他们会给您一个MySQL语句,您将无意中在您的数据库上运行.
我阅读了整篇文章,但我仍然有一些重大问题需要了解它是什么以及如何完成.
在第一个例子中,他们实际会看到什么?
据我所知,如果我实际上回应$ name,将看到所有的名字,因为它总是"是真的"我是否正确?
我不明白的另一件事是mysql_real_escape_string()是否解决了MySQL注入问题,还有更多问题需要解决.
我真的没有得到的是mysql_real_escape_string()是为了解决这个问题,为什么不自动完成,我的意思是你有必要每次都添加mysql_real_escape_string(),是否有你应该使用的情况这就是为什么他们不自动化?
Bre*_*ley 10
MySQL不会自动转义,因为您自己构建查询字符串.例如:
$query = 'SELECT * FROM users WHERE name="' . $name . '"';
Run Code Online (Sandbox Code Playgroud)
您只需传递存储在$ query中的原始字符串,该字符串对SQL注入开放.例如,如果$ name为[OR"1 = 1],则查询字符串最终为:
$query = 'SELECT * FROM users WHERE name="something" OR "1=1"
Run Code Online (Sandbox Code Playgroud)
这将返回用户表中的每个用户.这就是你需要逃避价值的原因.但是,如果您使用PDO,则在您使用绑定功能时会为您完成.这是一个两步过程,准备查询,然后将数据/变量"绑定"到占位符.在PDO中,您的查询字符串将如下所示:
$query = 'SELECT * FROM users WHERE name=":name"';
$bindings = array('name'=>'something');
prepare($query);
execute($bindings);
Run Code Online (Sandbox Code Playgroud)
然后,事情会自动为您转义.
Bobby Tables对SQL注入的工作原理进行了很好的总结.它提供了多种语言(C#,Java,Perl,PHP等)的示例.
对于PHP,它很大程度上取决于您访问数据库的方式.您可以使用数据库提取层(例如ADODB)来参与查询.