当前位置: 首页 > 图文教程 > 服务器 > 安全防护 > 判断Web数据库方式的一个小经验

安全防护
服务器安全设置(十六)
服务器安全设置(十七)
服务器安全设置(十八)
服务器安全设置(十九)
服务器安全设置(二十)
服务器安全设置(二十一)
服务器安全设置(二十二)
Windows Server 2003 虚拟主机的安全配置
Win2000 Server入侵监测
Web服务器的安全和攻击防范 (一)
Web服务器的安全和攻击防范 (二)
Web服务器的安全和攻击防范 (三)
Web服务器的安全和攻击防范 (四)
Web服务器的安全和攻击防范 (五)
安全配置和维护Apache WEB Server (上)
安全配置和维护Apache WEB Server (下)
安全性与IIS (一)
安全性与IIS (二)
安全性与IIS (三)
安全性与IIS (四)

安全防护 中的 判断Web数据库方式的一个小经验


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-29   浏览: 54 ::
收藏到网摘: n/a

很多站都是这样防止或是过滤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这样的长度总足够了吧?