SQL注入
SQL注入指的是攻击者篡改程序中的SQL语句,在管理员不知情的情况下实现非法操作,以此来欺骗数据库服务执行非授权的任意查询语句,从而进一步得到响应的数据信息。
SQL注入最常出现在“会员登陆”功能中。
例如:
某用户在网站中执行登录操作时,程序将会执行如下SQL语句:
select * from 用户表 where username=’用户名’ and password=’密码’
当用户输入正确的用户名密码时,该语句就会查询到相应记录,则会表示会员登陆成功。
//正常情况下:select * from user where username='张三' and password='123456';//非法登录操作select * from user where username='' or 1=1;#' and password='';
有漏洞的代码是致命的,为了防止SQL注入的发生,最简单的办法就是使用预处理语句。
PDO预处理
使用预处理语句可以确保不会发生SQL注入的问题。在PDO中,可以使用prerare(),方法来实现预处理语句,返回值是PDOStatement实例。
PDOStatement PDO::prepare( String sql )
<?phpheader("content-type:text/html;charset=utf-8");$userName = "张三";$password = "123456";//连接数据库$url = "mysql:host=127.0.0.1;dbname=cai";$user = "root";$pwd = "123";$conn = new PDO($url,$user,$pwd);//预处理$st = $conn->prepare("select * from user where username=? and password=?");//问号?:SQL 语句中的问号,表示占位符,后面将会为其绑定具体的参数值。$st->bindParam(1,$userName);$st->bindParam(2,$password);$st->execute();//通过 execute() 方法,执行预处理语句。//数字1:表示 SQL 语句中的第 1 个占位符,也就是 username 字段的值。//$userName:将 $userName 变量值,绑定到 SQL 语句中的第 1 个占位符。//获得结果集$rs = $st->fetch();echo "<pre>";var_dump($rs);echo "</pre>";
