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

安全防护
2003服务器A级BT安全配置指南(12)
2003服务器A级BT安全配置指南(13)
修改用户控制权限管理自启动文件
IIS6.0下建立FTP“用户隔离”站点
SQL Server数据库安全规划全攻略(1)
从IIS到SQL Server数据库安全
匿名FTP的安全设定(1)
匿名FTP的安全设定(2)
SQL Server防范措施(2)
域名解析优化也会有麻烦
10个步骤保护IIS Web服务器安全
突破SQL错误提示上传webshell
判断Web数据库方式的一个小经验
sqlserver取得网站路径的几种方法以及比较(1)
sqlserver取得网站路径的几种方法以及比较(2)
阿江的WINDOWS服务器安全设置
RAdmin 服务端高级配置(2)
Win2000安全检查清单(1)
Win2000安全检查清单(2)
Win2000安全检查清单(3)

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-29   浏览: 38 ::
收藏到网摘: 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这样的长度总足够了吧?