判断Web数据库方式的一个小经验

时间:2008-09-18 03:52:00   来源:无忧考网     [字体: ]
很多站都是这样防止或是过滤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这样的长度总足够了吧?

  更多请关注考试大计算机等级站