SQL注入问题

网站如果过滤掉 ‘ and 等字符 是不是就完全没有办法注入了?
就是说 比如
xxx.asp?id=10'
xxx.asp?id=10 and 1=2
或者xxx.com/xxx.asp?id=10改成xxx.com%5cxxx.asp?id=10
全都没用
是我没问清楚 ???我问的不是如何防范 谢谢
在补充下 废话就不要说了

那还有什么办法呢?

通用的asp防注入程序.杜绝SQL注入隐患.提升网站安全

一般的http请求不外乎 get 和 post,所以只要我们在文件中过滤所有post或者get请求中的参数信息中非法字符即可,所以我们实现http 请求信息过滤就可以判断是是否受到sql注入攻击。
IIS传递给asp.dll的get请求是是以字符串的形式,当传递给Request.QueryString数据后,asp解析器会分析Request.QueryString的信息,然后根据"&",分出各个数组内的数据所以get的拦截如下:
首先我们定义请求中不能包含如下字符
'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|xp_cmdshell
各个字符用"|"隔开,,然后我们判断的得到的Request.QueryString
具体代码如下

程序代码:

Dim sql_injdata
SQL_injdata = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|xp_cmdshell"
SQL_inj = split(SQL_Injdata,"|")

If Request.QueryString<>"" Then
For Each SQL_Get In Request.QueryString
For SQL_Data=0 To Ubound(SQL_inj)
If InStr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then
Response.Write("<script language=""javascript"" type=""text/javascript"">alert(""提交的信息中包含非法字符!"");</script>")
Response.End()
End If
Next
Next
End If

这样我们就实现了get请求的注入的拦截,但是我们还要过滤post请求,所以我们还得继续考虑request.form,这个也是以数组形式存在的,,我们只需要再进一次循环判断即可。代码如下

程序代码:
If Request.Form<>"" Then
For Each SQL_Get In Request.Form
For SQL_Data=0 To Ubound(SQL_inj)
If InStr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then
Response.Write("<script language=""javascript"" type=""text/javascript"">alert(""提交的信息中包含非法字符!"");</script>")
Response.End()
End If
Next
Next
End If

现在已经实现了get和post请求的信息拦截,只需要在conn.asp之类的打开数据库文件之前引用这个页面即可。
实例:
Option Explicit
'//SQL注入拦截开始
Dim SQL_injdata, SQL_inj, SQL_Get, SQL_Data
SQL_injdata = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
SQL_inj = Split(SQL_Injdata,"|")

If Request.QueryString<>"" Then Call KillSQLinj(Request.QueryString)'//get方式拦截
If Request.Form<>"" Then Call KillSQLinj(Request.Form)'//post方式拦截

Sub KillSQLinj(fashion)
For Each SQL_Get In fashion
For SQL_Data=0 To Ubound(SQL_inj)
If InStr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then
Response.Write("<script language=""javascript"" type=""text/javascript"">alert(""提交的信息中包含非法字符!"");</script>")
Response.End()
End If
Next
Next
End Sub
'//SQL注入拦截结束

要是回答的内容有问题,或认为不妥,请发送百度消息给我,消息内容加上本页网址哦。。

·
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-06-25
SQL全称是“结构化查询语言(Structured Query Language)”,最早的是IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言,它的前身是SQUARE语言。SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL语言,得到了广泛的应用。如今无论是像Oracle ,Sybase,Informix,SQL server这些大型的数据库管理系统,还是像Visual Foxporo,PowerBuilder这些微机上常用的数据库开发系统,都支持SQL语言作为查询语言。

SQL是高级的非过程化编程语言,允许用户在高层数据结构上工作。他不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统可以使用相同的SQL语言作为数据输入与管理的接口。它以记录集合作为操纵对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语言可以嵌套,这使他具有极大的灵活性和强大的功能,在多数情况下,在其他语言中需要一大段程序实现的一个单独事件只需要一个SQL语句就可以达到目的,这也意味着用SQL语言可以写出非常复杂的语句。

SQL同时也是数据库文件格式的扩展名。

SQL语言包含4个部分:

数据定义(DDL)语言(如CREATE, DROP,ALTER等语句)

数据操纵(DML)语言(INSERT, UPDATE, DELETE语句)

数据查询语言(SELECT语句)

数据控制语言(如GRANT,REVOKE,COMMIT, ROLLBACK等语句)

取自""
SQL(STructured Query Language)是一种资料库查询和程式设计语言,用於存取资料以及查询、更新和管理关联式资料库系统。美国国家标准局(ANSI)与国际标准化组织(ISO)已经制定了 SQL 标准。ANSI 是一个美国工业和商业集团组织,发展美国的商务和通讯标准。ANSI 同时也是 ISO 和 International Electrotechnical Commission(IEC)的成员之一。ANSI 发布与国际标准组织相应的美国标准。1992年,ISO 和 IEC 发布了 SQL 的国际标准,称为 SQL-92。ANSI 随之发布的相应标准是 ANSI SQL-92。ANSI SQL-92 有时被称为 ANSI SQL。尽管不同的关联式资料库使用的 SQL 版本有一些差异,但大多数都遵循 ANSI SQL 标准。SQL Server 使用 ANSI SQL-92 的扩展集,称为 T-SQL,其遵循 ANSI 制定的 SQL-92 标准。

SQL 语言包括两种主要程式设计语言类别的陈述式: 资料定义语言 (DDL)与资料操作语言 (DML)。下面我们将介绍这两类语言。
第2个回答  2008-06-06
有办法注入,这些是03年之前流行的注入方法了,现在基本的网站都会有过滤,这种办法基本找不到可以实现的地方了,但又有更新的注入办法出现,如跨站注入等,你去看最新的黑客X档案,黑客技术更新还是挺快的,不要拿老资料来学习了。也可以去下载自动注入工具,用工具拦截它的信息,分析其注入步骤
第3个回答  2008-06-14
单独过滤掉 ' 单引号和 and 是不能完全防范sql注入的。

如果使用的是通用防注入程序更没用,使用cookie就可以绕过过滤限制。

如果是直接过滤的,那么可以将这些过滤的字词转换下URL编码提交,或者 使用Cast(IS_SRVROLEMEMBER(0x730079007300610064006D0069006E00) as varchar(1))+char(124)=1 的16进制sql执行语句注入。

and也可以转换为16进制、url编码等绕过。
第4个回答  2008-06-05
操作简单上手,只要来个包含或放入conn.asp中,搞定
末了,估计还有一些危险字符没有放全,帮我补全一下,谢谢了

<%
''''--------定义部份------------------
Dim Fy_Post,Fy_Get,Fy_In,Fy_Inf,Fy_Xh,Fy_db,Fy_dbstr
''''自定义需要过滤的字串,用 "防" 分隔
Fy_In = "''''防;防and防exec防insert防select防delete防update防count防*防%防chr防mid防master防truncate防char防declare防<防>防=防|防-防_"
Fy_Inf = split(Fy_In,"防")
If Request.Form<>"" Then
For Each Fy_Post In Request.Form

For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.Form(Fy_Post)),Fy_Inf(Fy_Xh))<>0 Then
Response.Write "<Script Language=JavaScript>alert(''''网长友情提示黑客大侠↓

请不要在参数中包含非法字符尝试注入攻击本站,本站做起来很不容易的.俺是菜鸟,好怕怕,放俺一马吧!

://给俺留言'''');</Script>"
Response.Write "非法操作!本站已经给大侠您做了如下记录↓<br>"
Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"
Response.Write "操作时间:"&Now&"<br>"
Response.Write "操作页面:"&Request.ServerVariables("URL")&"<br>"
Response.Write "提交方式:POST<br>"
Response.Write "提交参数:"&Fy_Post&"<br>"
Response.Write "提交数据:"&Request.Form(Fy_Post)
Response.End
End If
Next
Next
End If
If Request.QueryString<>"" Then
For Each Fy_Get In Request.QueryString
For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<>0 Then
Response.Write "<Script Language=JavaScript>alert(''''网长友情提示黑客大侠↓

请不要在参数中包含非法字符尝试注入攻击本站,本站做起来很不容易的.俺是菜鸟,好怕怕,放俺一马吧!

有话好话,请到http://给俺留言'''');</Script>"
Response.Write "非法操作!本站已经给大侠您做了如下记录↓<br>"
Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"
Response.Write "操作时间:"&Now&"<br>"
Response.Write "操作页面:"&Request.ServerVariables("URL")&"<br>"
Response.Write "提交方式:GET<br>"
Response.Write "提交参数:"&Fy_Get&"<br>"
Response.Write "提交数据:"&Request.QueryString(Fy_Get)
Response.End
End If
Next
Next
End If
%>
这些就是防止注入的方法,涉及到的过滤比较多,最注入有防范作用,不过难说,什么东西都不是绝对的,就好像MS说他们的Windows觉得安全一样,不过上面的代码够用了,如果发现有先的要过滤的东西,麻烦给我做个补充。顺便提个醒,用户登陆不要 用户和密码一起验证,那样也会被注入。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网