PDO SQL语句预处置惩罚的步调
第1步:制作雷同布局的SQL
将SQL语句差别的数据部门,用参数或问号来取代。
第2步:将雷同布局的SQL语句预编译
PDO::prepare
1. 功效:将雷同布局的SQL语句预编译
1. 语法:public PDOStatement PDO::prepare ( string $statement )
第3步:将真正的数据与占位符绑定在一路
PDOStatement::bindValue
1. 功效:把一个值绑定到一个参数
1. 语法:bool PDOStatement::bindValue ( mixed $parameter , mixed $value )
第4步:实行预处置惩罚语句
PDOStatement::execute
1. 功效:实行一条预处置惩罚语句
1. 语法:bool PDOStatement::execute ( void )
SQL Injection:便是通过把SQL下令插入到Web表单递交或输入域名或页面恳求的盘问字符串,终极到达诱骗办事器实行恶意的SQL下令。
详细来说,它是使用现有应用步伐,将(恶意)的SQL下令注入到背景数据库引擎实行的本领,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在宁静毛病的网站上的数据库,而不是根据设计者意图去实行SQL语句。
起首让我们相识什么时间大概产生SQL Injection。
假设我们在扫瞄器中输入URL ,因为它只是对页面的简洁恳求无需对数据库动举行动态恳求,以是它不存在SQL Injection,当我们输入www.sample.com?id=1时,我们在URL中通报变量id,而且提供值为1,因为它是对数据库举行动态盘问的恳求(此中?id=1表现数据库盘问变量),以是我们可以在该URL中嵌入恶意SQL语句。
· SQL注入打击(地点栏结构特别参数)
正常情形
非正常情形
· SQL注入打击示例(表单登录)
用户名和暗码与数据库中存储的同等,登录乐成
用户名或暗码与数据库中存储的纷歧致,登录失败
在没有效户名和暗码的情形下,使用SQL注入毛病,结构特别字符串,可以或许登录乐成
阐发:
在MySQL中,#是解释符,#标记后的内容会被MySQL纰漏,不会实行,那么上述语句则等同于下述语句:
select * from user where username='' or 1=1
可以看到整个where子句的条件是由or毗连的(或运算),只要有一个条件为真,则整个条件为真,or后的条件1=1建立(为真),故整个where子句为真,故登录乐成。将该select语句进一步简化,等同于如下语句:
select * from user
该SQL语句的作用是盘问整张user表,user表中的全部数据都袒露了。