求助防注入问题

yousite1 2006-05-17 10:09:59
求助防注入问题,对于像论坛对sql注入有特殊要求的系统,请问如何实现防注入最好呢?
通用防入那种方法肯定不行,比如人家发贴子这样写我的最爱'xxx'发贴后提示含有非法字符。
肯定发贴的人会很郁闷。因为我没认真研究过动网的防注入,所以对此还颇不解。
想求助于有研究过防注入的朋友,一起交流一下,分享一下你的防注入方法!
谢谢~~~
...全文
310 20 打赏 收藏 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
yousite1 2006-06-29
  • 打赏
  • 举报
回复
通用防注是垃圾。
个人总结出最好的防注方法:
整型:直接clng(reuqest("id"))
字符型
a=replace(request("a"),"'","''")
sql="select * from table where afield='" &a &"'"
个人总结出来的,绝对没有注入漏洞!!!
yousite1 2006-05-19
  • 打赏
  • 举报
回复
一个单引号替换成两个是行不通的。再者对于sql server的服务这样作仍然是可以注入的。
黑白网络的雨村说写过注入方法。
而对access这样作是可以有效防止注入的。
htmlencode 更不行了。
通用防注入也不行。具体原因我在上面的有说明了。
希望能求到其它的比中间翻译更好的办法。
yousite1 2006-05-19
  • 打赏
  • 举报
回复
楼上的都没明白我的意思。
我的意思是比如在搜索的时侯用户输入关键词:卢志英'
一样可以搜索到我发表的贴子:
我的一生最爱的人'卢志英'
我的想法是通过翻译来实现。
一个字符对应一个其它的字符。
比如'对应‘
又比如%对应%
exec对应****
等等等等。。。。。
heroooooo 2006-05-18
  • 打赏
  • 举报
回复
一般都是这么做的,下载个代码看看就知道了,LZ就快点揭贴吧..
cqq 2006-05-18
  • 打赏
  • 举报
回复
说了多少遍了,在插入数据库的时候,只需要

字符串 替换单引号为 两个单引号

数字的先判断是否数字类型的


显示的时候根据你的需要做相应的转换。
ice241018 2006-05-18
  • 打赏
  • 举报
回复
学习
heroooooo 2006-05-18
  • 打赏
  • 举报
回复
htmlencode
kafly 2006-05-18
  • 打赏
  • 举报
回复
POST和GET应该区别对待!

我有一现成程序,用了很不错。
给你试试

<%
'--------版权说明------------------
'SQL通用防注入程序 V2.0 完美版
'本程序由 火狐-枫知秋 独立开发
'对本程序有任何疑问请联系本人
'QQ:613548 Http://Www.WrSky.Com
'此版本欢迎到转载~~~

'--------定义部份------------------
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, "枫")

'--------POST部份------------------
If Request.Form<>"" Then

For Each Fy_Post In Request.Form

For Fy_Xh=0 To Ubound(Fy_Inf)-1

If Instr(LCase(Request.Form(Fy_Post)), Fy_Inf(Fy_Xh))<>0 Then

'--------写入数据库-------头--------
Fy_dbstr = "Driver={SQL Server};Server=127.0.0.1;Database=aaaaa;Uid=bbbbb;Pwd=ccccc"
Set Fy_db = Server.CreateObject("ADODB.CONNECTION")
Fy_db.open Fy_dbstr
Fy_db.Execute("insert into ??????")&"','POST','"&Fy_Post&"','"&replace(Request.Form(Fy_Post),"'","''")&"')")
Fy_db.close
Set Fy_db = Nothing
'--------写入数据库-------尾--------

Response.Write "<Script Language=JavaScript>alert('严重警告↓\n\n请不要在参数中包含非法字符尝试注入!');</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

'--------GET部份-------------------
If Request.QueryString<>"" Then

For Each Fy_Get In Request.QueryString

For Fy_Xh=0 To Ubound(Fy_Inf)-1

If Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<>0 Then

''--------写入数据库-------头--------
Fy_dbstr = "Driver={SQL Server};Server=127.0.0.1;Database=aaaaaa;Uid=bbbbbb;Pwd=cccccc"
Set Fy_db=Server.CreateObject("ADODB.CONNECTION")
Fy_db.open Fy_dbstr
Fy_db.Execute("insert into ???????")
Fy_db.close
Set Fy_db = Nothing

'--------写入数据库-------尾--------
Response.Write "<Script Language=JavaScript>alert('严重警告↓\n\n请不要在参数中包含非法字符尝试注入!');</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
%>
yousite1 2006-05-18
  • 打赏
  • 举报
回复
我觉得作个翻译好像挺不错的。
存取数据库时用其它字符代替掉,显示的时侯再代替回来。
niehuihui 2006-05-18
  • 打赏
  • 举报
回复
网上有很多ASP防注的代码,看看人家的,改一个自己的~~就成了
lianxiangpanjin 2006-05-18
  • 打赏
  • 举报
回复
可以转换呀,把内容里英文的'转换成中文的‘
yousite1 2006-05-18
  • 打赏
  • 举报
回复
楼上这些方法显然都不合理,难道我发个贴子。
标题为 我的一生最爱的人'卢志英'
被过滤完贴子标题不就变成 :我的一生最爱的人卢志英
了,这样发贴的人会郁闷呀。
求助有研究过动网或其它论坛程序防注入方法的兄弟们!
agaovxy 2006-05-18
  • 打赏
  • 举报
回复
其实我们可以修改一些出名的防注射代码,再request.form的检测上使用过滤即可
agaovxy 2006-05-18
  • 打赏
  • 举报
回复
主要在form上将单引号替换为两个单引号就可
agaovxy 2006-05-18
  • 打赏
  • 举报
回复
sql的注射方法分为Request.QueryString、Request.Form、Request.Cookies和 Request.ServerVariables
对于get的方法攻击
可以这样
fqys=request.servervariables("query_string")
  dim nothis(18)
  nothis(0)="net user"
  nothis(1)="xp_cmdshell"
  nothis(2)="/add"
  nothis(3)="exec%20master.dbo.xp_cmdshell"
  nothis(4)="net localgroup administrators"
  nothis(5)="select"
  nothis(6)="count"
  nothis(7)="asc"
  nothis(8)="char"
  nothis(9)="mid"
  nothis(10)="'"
  nothis(11)=":"
  nothis(12)=""""
  nothis(13)="insert"
  nothis(14)="delete"
  nothis(15)="drop"
  nothis(16)="truncate"
  nothis(17)="from"
  nothis(18)="%"
  errc=false
  for i= 0 to ubound(nothis)
  if instr(FQYs,nothis(i))<>0 then
  errc=true
  end if
  next
  if errc then
  response.write " "
  response.end
  end if

对于form只要我们过滤一些特殊的字符就可
<%
  function CHK(fqyString)
  fqyString = replace(fqyString, ">", ">")
  fqyString = replace(fqyString, "<", "<")
  fqyString = replace(fqyString, "&#", "&")
  fqyString = Replace(fqyString, CHR(32), " ")
  fqyString = Replace(fqyString, CHR(9), " ")
  fqyString = Replace(fqyString, CHR(34), """)
  fqyString = Replace(fqyString, CHR(39), "'")
  fqyString = Replace(fqyString, CHR(13), "")
  fqyString = Replace(fqyString, CHR(10) & CHR(10), "</P><P> ")
  fqyString = Replace(fqyString, CHR(10), "<BR> ")
  CHK = fqyString
  end function
  %>
深入的研究可看我转帖的一篇文章
http://community.csdn.net/Expert/topic/4686/4686036.xml?temp=9.389895E-02
heroooooo 2006-05-17
  • 打赏
  • 举报
回复
up,up
heroooooo 2006-05-17
  • 打赏
  • 举报
回复
<%
function clear(str)
str1=replace(str,"'","")
str1=replace(str1,"and","")
str1=replace(str1,";","")
str1=replace(str1," ","")
if str<>str1 then response.end
clear=str1
end function
%>
「已注销」 2006-05-17
  • 打赏
  • 举报
回复
替换单双引号、分号、小括号,改写 select , update , drop , delete , exec,create,alter

删除/**/

基本上就这些吧~
moodboy1982 2006-05-17
  • 打赏
  • 举报
回复
把一些特殊字符如:'(单引号)过滤过.
yousite1 2006-05-17
  • 打赏
  • 举报
回复
顶上去。

28,402

社区成员

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

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