PDO优化,SQL注入攻击PDO SQL语句预处理
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注入攻击
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注入攻击示例(表单登录)
User表中用户账户数据
前端登录表表单
后端验证登录代码
登录成功
用户名和密码与数据库中存储的一致,登录成功
登录失败
用户名或密码与数据库中存储的不一致,登录失败
利用漏洞,非法登录成功
在没有用户名和密码的情况下,利用SQL注入漏洞,构造特殊字符串,能够登录成功
分析:
在MySQL中,#是注释符,#符号后的内容会被MySQL忽略,不会执行,那么上述语句则等同于下述语句:
select * from user where username='' or 1=1
可以看到整个where子句的条件是由or连接的(或运算),只要有一个条件为真,则整个条件为真,or后的条件1=1成立(为真),故整个where子句为真,故登录成功。将该select语句进一步简化,等同于如下语句:
select * from user
该SQL语句的作用是查询整张user表,user表中的全部数据都暴露了。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.