asp 防SQL注入代码

as123456789d 2010-08-19 10:08:54
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(’’’’网长友情提示黑客大侠↓请不要在参数中包含非法字符尝试注入攻击本站,本站做起来很不容易的.俺是菜鸟,好怕怕,放俺一马吧!给俺留言’’’’);</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

这代码加在 conn.asp
行不通啊
加了之后发布不了文章了
并显示 :非法操作!本站已经给大侠您做了如下记录↓
操作IP
这些都显示了

哪个大侠能豆给一个好代码 防SQL注入

并且可以直接加在 conn.asp里面的

一定要好的,能起作用的,,谢谢!!!

...全文
225 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
BoyHaXin 2010-08-20
  • 打赏
  • 举报
回复
前段时间我发现一个问题,使用百度搜索关键词之后,百度会将查询的数据存入COOKIE,如果你网站有判断COOKIE的注入方式,很有可能,查到的你的页面就打不开,提示非法注入的,如果你网站没有取COOKIE的语句,防注入也不要用COOKIE
001007009 2010-08-20
  • 打赏
  • 举报
回复
看看!~
BoyHaXin 2010-08-20
  • 打赏
  • 举报
回复
尽量使用rs.addnew,rs.update这样的模式的,别conn.execute,在查询时用将取到的数据判断一下,就差不多了。
as123456789d 2010-08-20
  • 打赏
  • 举报
回复
luxu001207

说的是对,不过这样是不是有点复杂
as123456789d 2010-08-20
  • 打赏
  • 举报
回复
If Instr(Request.ServerVariables("PATH_INFO"),"admin") = 0 Then
Call InData()
End If
楼上这位大哥!!

admin 这个参数是什么意思。。 =0 ??
离洛 2010-08-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 luxu001207 的回复:]
呵呵,防注入不是这么搞的
这样太不友好了,有时候正常提交的数据都提交不了

注入的形式主要有以下几种:
1.通过URL参数(GET方式)
2.通过表单参数(POST方式)
3.通过COOKIE

比较合理的方式应该是验证每一个客户端提交的参数
1.如果程序需要参数A一定是数字的话,那么就检测该参数是否是数字
2.如果程序需要参数A是某个有规律的字符串的话,那么就用正则式去检查
……
[/Quote]
+1
kaifadi 2010-08-20
  • 打赏
  • 举报
回复
我的做法是直接杀',其他什么也不处理,进入后台直接server.htmlencode()
Atai-Lu 2010-08-19
  • 打赏
  • 举报
回复
呵呵,防注入不是这么搞的
这样太不友好了,有时候正常提交的数据都提交不了

注入的形式主要有以下几种:
1.通过URL参数(GET方式)
2.通过表单参数(POST方式)
3.通过COOKIE

比较合理的方式应该是验证每一个客户端提交的参数
1.如果程序需要参数A一定是数字的话,那么就检测该参数是否是数字
2.如果程序需要参数A是某个有规律的字符串的话,那么就用正则式去检查
3.如果程序需要参数A是无规律字符串,那么就要考虑一下,这个无规律的字符串一般是用来干什么的?如果这个字符串最终是需要对数据库进行添加或修改操作,那么显然,使用insert或update语句的形式的话,会有很大的被注入的危险,所以可以考虑使用以下形式更稳妥一些:

set rs = server.createobject("adodb.recordset")
sql="..."
rs.open sql,conn,1,3
'rs.addnew
...
rs.update
rs.close
set rs=nothing


如果是用于查询的,显然,你并不需要用户提交一个长长的字符串(比如让用户输入上千个字符进行查询),那么,你可以考虑截断这个字符串,然后再进行一些字符处理,尽可能的规避风险即可
lovebaby 2010-08-19
  • 打赏
  • 举报
回复
一般放在数据库连接文件中.晕
as123456789d 2010-08-19
  • 打赏
  • 举报
回复
不知道 放在什么地方啊!
挨踢直男 2010-08-19
  • 打赏
  • 举报
回复
Function CheckData()

Dim KeyWord
KeyWord="select|and|or|insert|delete|count(|drop|truncate|asc(|char(|xp_cmdshell|net localgroup administrators|net user|update|'|chr|mid|master|from|where|declare"

Item_SQL = Split(KeyWord,"|")

If Request.QueryString<>"" Then
For Each SQL_Get In Request.QueryString
For SQL_Data=0 To Ubound(Item_SQL)
If instr(Request.QueryString(SQL_Get),Item_SQL(Sql_DATA))>0 Then
Response.Write "参数错误,内容含有非法字符,有疑问可及时向网站管理员反应!"
Response.End
End if
Next
Next
End If

End Function

Call CheckData()
lovebaby 2010-08-19
  • 打赏
  • 举报
回复
很明细是你后台发布文章的代码提交中含有了防注入变量Fy_In包含的字符。
解决办法:
1、检查你后台发布文章的页面中get和post提交数据的关键字符,并更改,保证不含在Fy_In变量中。比如原程序通过URL传递:xxx.asp?action=edit&id=1,这里edit即为一个特殊字符串,把它改成别的即可。
2、将你的防注入做成一个函数,然后在公共文件的头部根据目录进行判断,以此绕过后台目录,如果是后台目录则不进行防注入操作。
在这里给你提供一个例子,你的同理:

If Instr(Request.ServerVariables("PATH_INFO"),"admin") = 0 Then
Call InData()
End If

Sub InData()
Dim SQL_injdata,SQL_inj,SQL_Get,Sql_Post,SQL_Data
SQL_injdata =":|;|>|<|--|sp_|xp_|\|dir|cmd|^|(|)|+|$|'|copy|format|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"

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 "SQL通用防注入系统"
Response.end
end if
next
Next
End If

If Request.Form<>"" Then
For Each Sql_Post In Request.Form
For SQL_Data=0 To Ubound(SQL_inj)
if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))>0 Then
Response.Write "SQL通用防注入系统"
Response.end
end if
next
next
end if
End Sub

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧