如何防止SQL注入攻击
1个回答
展开全部
方法一:密码比对
代码:$sql="selectpasswordfromuserswhereusername='$name'";$res=mysql_query($sql,$conn);if($arr=mysql_fetch_assoc($res)){//如果用户名存在if($arr['password']==$pwd) {//密码比对echo "登录成功";}else{echo "密码输入有误";}}else{echo "该用户名不存在";}分析:该情况下,代码健壮了不少,即使在magic_quote_gpc=Off的情况下,也能防止SQL注入攻击。因为攻击者想成功登录的话,得绕过两道坎,第一是输入的用户名要存在,这一步可以构造一个SQL语句(‘ or 1=1%23)直接绕过,但是这样子无法通过第二道坎。因为需要用户输入一个正确的密码才能通过,显然,这已经拒绝了SQL注入攻击。
方法二:使用PDO的PDO::prepare()预处理操作来防止SQL注入攻击
思路:创建一个pdo对象,利用pdo的预处理操作可以防止SQL注入攻击代码:$name=$_GET['username'];$pwd=$_GET['password'];$sql="select*fromuserswhereusername=?andpassword=?";//1
.创建一个pdo对象$pdo=new PDO("mysql:host=localhost;port=3306;dbname=injection","root","");//2
.设置编码$pdo-exec("setnames'utf8'");//3
.预处理$sql语句
$pdoStatement=$pdo-prepare($sql);//4
.把接收到的用户名和密码填入
代码:$sql="selectpasswordfromuserswhereusername='$name'";$res=mysql_query($sql,$conn);if($arr=mysql_fetch_assoc($res)){//如果用户名存在if($arr['password']==$pwd) {//密码比对echo "登录成功";}else{echo "密码输入有误";}}else{echo "该用户名不存在";}分析:该情况下,代码健壮了不少,即使在magic_quote_gpc=Off的情况下,也能防止SQL注入攻击。因为攻击者想成功登录的话,得绕过两道坎,第一是输入的用户名要存在,这一步可以构造一个SQL语句(‘ or 1=1%23)直接绕过,但是这样子无法通过第二道坎。因为需要用户输入一个正确的密码才能通过,显然,这已经拒绝了SQL注入攻击。
方法二:使用PDO的PDO::prepare()预处理操作来防止SQL注入攻击
思路:创建一个pdo对象,利用pdo的预处理操作可以防止SQL注入攻击代码:$name=$_GET['username'];$pwd=$_GET['password'];$sql="select*fromuserswhereusername=?andpassword=?";//1
.创建一个pdo对象$pdo=new PDO("mysql:host=localhost;port=3306;dbname=injection","root","");//2
.设置编码$pdo-exec("setnames'utf8'");//3
.预处理$sql语句
$pdoStatement=$pdo-prepare($sql);//4
.把接收到的用户名和密码填入
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询