如何防止sql注入

防止sql注入属于安全性的工作;

1. 服务器端进行配置:magic_quotes_gpc设置为on,在php.ini中设置;

如果设置后,针对$sql="select * from users where username='$username'and password ='$password'"就会失效;

但是针对$sql="select * from users where username=$usernameand password =$password"还是会生效;

而且如果程序员没有修改服务器端配置的权利,那么也不能这样预防;

如何从程序角度考虑?

1. 密码比对:通过用户输入的用户名去查询数据库,如果查询到对应的密码,则和用户提交的密码进行比对,相同则说明合法,反之非法;

$sql="select password from users where username='$username'";
$res=mysql_query($sql,$conn);

if($row=mysql_fetch_array($res)){

if($row[0]==$password){

header("Location:Manageusers.php");

}else{
echo "你输入的密码不正确<a href='Login.php'>返回重新登陆</a>";
}

}else{
echo"你输入的用户名不存在<a href='Login.php'>返回重新登录</a>"
}

2.PDO方式,使用PDO::prepare()预处理操作,防止sql注入漏洞;在php.ini中启用pdo;在extention=mysql前面去掉;

$myPdo=new PDO("mysql:host=localhost;port=3306;dbname=spdb","root","root");

$myPdb->exec("set names utf-8");

$pdoStatment= $myPdo->prepare($sql);

$pdoStatment->execute(array($username,$password));

$res=$pdoStatment->fetch();
if(empty($res)){
echo"用户名密码错误<a href='Login.php'>返回</a>"
}else{
header("Location:ManageUsers.php");
}

$sql="select * from users where username=? and password =?"

3.入侵检测系统,应用IDS可以提供对sql的保护,并监视数据库和其他应用;

另外在搜索引擎中,由于查询使用模糊查询,虽然只读不会破坏数据库,但是不加控制的话会影响效率,同时存在泄露隐私的可能。

1.关键字使用addslashes方法:$keyword=addslashes($keyword);

2.关键字加转义符:$keyword=str_replace("_","\_",$keyword);

                                   $keyword=str_replace("%","\%",$keyword);




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值