来源:自学PHP网 时间:2015-04-17 18:33 作者: 阅读:次
[导读] 自:exploits blog很多站都是这样防止或是过滤ASP提交的参数的if isnumeric(id) Thenresponse.write "yes!"call sql_query(id)elseresponse.write "Error id"Response.Endend if这样就不论怎么样,如果出现非数值就出现错...
自:exploits blog
很多站都是这样防止或是过滤ASP提交的参数的 if isnumeric(id) Then response.write "yes!" call sql_query(id) else response.write "Error id" Response.End end if 这样就不论怎么样,如果出现非数值就出现错误,很直接的防范,没办法出错,也没办法得到数据库类型 但是其实我们还是有方法的, 比如这个ID是由xxx.asp提交的 xxx.asp?id=1 我们就在后面加上38个以上的数字,比如0 xxx.asp?id=100000000...{"0"x38} 这样就能得让上面那段ASP在执行SQL_Query的时候出错了 提示如下 引用内容: Microsoft OLE DB Provider for SQL Server 错误 80040e57 数字 100000000000000000000000000000000000000000000000000000000000000000 超出了数字表示范围(最大精度为 38 位有效数字)。 /announce.asp,行 19 明白了没?我们让数据库出错了.可见Isnumeric的防范并不是彻底的. 其实原因也很简单:SQL中定义 Numeric数据的精度最大只能是38,如果我们提交了超过38个数值以后就会出现错误,从而让数据库出现错误... 防范也很简单,一句代码足够 程序代码: if id>1000000000 Then Call Error(id) 100000000这样的长度总足够了吧? |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com