博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
防止SQL注入
阅读量:6934 次
发布时间:2019-06-27

本文共 1154 字,大约阅读时间需要 3 分钟。

看韩顺平老师 数据库编程陷阱 视频讲座 笔记

--------------------------------------------------

SQL注入:

攻击:

$sql = "SELECT * FROM users WHERE        username='$user' and passwd='$ps'";

万能用户名:

$user=bb' union select * from user (limit 1 或者 order by 之类的)/*

此时 SQL语句为

SELECT * FROM users WHERE        username='bb' union select * from users/*' and passwd='$ps'

注: /* 表示后面的sql语句不执行 union 后面一定有值出现,所以此sql会有返回值

万能密码:

$pw=bb' or 1=1  或者 $pw = bb' union select * from user

如果PHP中书写sql语句时,变量值没有用单引号引起来,mysql会将变量值当成数值类型,很危险

防止:

1. 服务器

设置php.ini
把magic_quote_gpc设置为on(对单引号进行转译),display_errors设为off。
此时,原来的万能用户名和万能密码已无效,但还是能注入,因为 char(96)对应的是单引号,使用 char(96) 一样能注入

2.代码

  方案 (1)
  密码比对: 通过用户输入的用户名查询数据库,如果得到密码,再与用户输入的密码相比对,如果相等,则正确
 

  方案(2)

  使用PDO (PHP Data Object)

 

exec("set name utf8");//3.预处理sql$sql = 'select * from users where username=? and passwd=?';$pdoStatment=$myPDO->prepare($sql);//4.$pdoStatment->execute(array($username,$passwd));//5.$res=$pdoStatment->fetch();if(empty($res)){ //错误}?>

 

===============================================================

 另外一种 是用  mysql_real_escape_string

预防数据库攻击的正确做法:

 

 

转载于:https://www.cnblogs.com/zhiqixue/archive/2012/12/09/2809912.html

你可能感兴趣的文章
职业规划
查看>>
局域网通知系统(消息群发)
查看>>
Linux启动界面切换:图形界面-字符界面(转)
查看>>
ORA-12154: TNS: 无法解析指定的连接标识符
查看>>
|DataDirectory|的使用
查看>>
01 背包问题 --- 待续 - -
查看>>
(转)oracle 11g安装后用户名忘记怎么办
查看>>
开源Gis简介(转)
查看>>
Linux iptables防火墙设置与NAT服务配置
查看>>
父子对等组之间的关系
查看>>
JMX操作ActiveMQ(2)
查看>>
HP-UX磁带备份错误收集
查看>>
html Frame、Iframe、Frameset 的区别 详细出处参考:http://www.jb51.net/web/22785.html
查看>>
[原]重要工具集
查看>>
Leetcode: Pow(x, n) and Summary: 负数补码总结
查看>>
Android启动画面实现
查看>>
HashMap详解
查看>>
WSHPSRS-匹克选择列表生成器-SRS(R12.2.3)
查看>>
Entity Framework 6 Recipes 2nd Edition(9-1)译->用Web Api更新单独分离的实体
查看>>
XamarinForms教程构建XamarinForms开发环境
查看>>