来源: http://www.pcsec.org/
Author: Tr4c3[at]126.com
先看Vbs手册里的描述:

IsNumeric 函数
返回 Boolean 值指明表达式的值是否为数字。

IsNumeric(expression)

expression 参数可以是任意表达式。

说明
如果整个 expression 被识别为数字,IsNumeric 函数返回 True;否则函数返回 False。如果 expression 是日期表达式,IsNumeric 函数返回 False。

一些程序员在写代码的时候比较喜欢用isnumeric来判断参数是否为数字型,依次来杜绝sql注入的产生。但是并不是1这样的数字才符 合条件,12e3,1d3,”1000,1000″,”1000,100″这样的计数法都符合条件,只要下面没用clng或者cint之类强行转换类型的 函数,就给我们带来了不一般的用处。
如下面的代码:

Vb 代码复制代码
  1. <%
  2. Dim idconnrsstrSql
  3. idRequest(“id”)
  4. If IsNumeric(id) = False Or id=“” Then
  5. Response.Write “非法数据”
  6. Response.End
  7. ‘Else
  8. ‘id = CLng(id)
  9. End If
  10. Set connCreateObject(“Adodb.Connection”)
  11. connStr“Provider=SQLOLEDB.1;Password=pass;Persist Security Info=True;User ID=sa;Initial Catalog=pubs;Data Source=localhost”
  12. conn.open connStr
  13. If id<>“” Then
  14. Set rsCreateObject(“Adodb.RecordSet”)
  15. strSql“select * from authors where contract=”id ‘id=1
  16. rs.open strSqlconn11
  17. While Not rs.bof And Not rs.eof
  18. Response.Write rs(“au_id”) & “<br>”
  19. Rs.Movenext
  20. Wend
  21. Rs.close
  22. Set rsNothing
  23. conn.close
  24. Set connNothing
  25. End If
  26. %>

然后提交http://localhost/sql_t.asp?id=1d3,返回如图所示.

isnumeric

实战测试:

net_isnumeric

在旁注的时候大家往往喜欢找个sql的下手,毕竟比access的用处要大,这样isnumeric帮了我们很大的忙,我在实战中发现不少站都可以用这个方法粗略的探测数据库类型,clng等函数处理过的不行,偶尔也会出现其他一些错误提示,具体视运气而定。

相关文章

本文已有 1 个回复

  1. woyigui @ 2009/04/08 10:49

    不好意思,没找到留言的地方,就先在这留言吧。。你到我blog去过了,我也过来了,可以的话,做个朋友,互相认识一下,我的msn:woyigui@gmail.com qq:283088088

添加回复

支持 Ctrl+Enter 快速提交