
已解决问题
谷歌popsummero用户在2016.05.06提交了关于“开讲啦sql注入测试经验教程”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-26T15:49:55。希望大家能够帮助她。详细问题描述及疑问:期待您的答案,我不知道说什么才好,除了谢谢 !
详细问题描述及疑问:期待您的答案,我不知道说什么才好,除了谢谢 !
登录注入
先看一个我们一般用的登录
$sql="sel
对于这种sql,对应一个万能密码和用户名:
万能密码:xx'or1='1
万能用户名:xx'unionselect*fromusers/*
执行时mysql解释为:
$sql=sel
不解释,瞬间破
同样,上面是在sql语句中查询字段后的输入值加了单引号,有些时候
$sql="select*fromuserswhereusername=$usernameandpassword=$password";
这时mysql解释会被当做数字型字段来匹配
万能密码:11unionselec
执行语句:
select*fromuserswher
查询注入
这个比较好理解,一般在页面的搜
$keyword=a
插入注入
我们先模拟一个网站注册页面
insertint
假如users表中grade为**字段,
insertintousers(username,passwo
这样也可
①.在服务器设置
服务器会自动将单引号转义为:'
不过攻击时可以将单引号写为char(13)-单引号ASCII码,也一样可以攻击
②.密码比对
通过输入的用户名获取密码,再对密码进行匹配
$sql="select*fromuserswhereusername='frank'"
$result=mysql_query($sql,$conn);
$row=mysql_fetch_array($result);
if($row['password']!=$password)
③.使用pdo的PDO::prepare()预处理操作
PDO(Ph**PDataObject)扩展在Ph**P5中加入,Ph**P6默认识别PDO连接**库,pdo相当于是一个**库抽象层,不同**库使用相同的方法名,解决**库连接不同意问题。
工作原理如下:
(使用时需先在php.ini中开启对pdo扩展的支持)
$sql="select*fromuserswhereusername=?andpassword=?";//创建一个pdo对象$mypdo=newPDO("mysql:host=localhost;port=3306;dbname=xx","root","123456");//设置编码$mypdo->exec("setnamesutf8");//预处理$sql$pdostatement=$mypdo->prepare(%sql);//将用户名和密码填入sql$pdostatement->execute(array($username,$password));//得到查询结果$result=$pdostatement->fetch();if(empty($result))
④.其他企业级解决sql注入方式:IDS(入侵检测系统)
关于sql注入对于开发工程师来说主要是防守,提高编写安全代码的意识,让我们编写的代码质量更脯安全性方面更好。