请教各位:怎样有效防止网站不被sql注入呢?谢谢大家!

hezhenyun 2008-02-29 01:22:42
请教各位:怎样有效防止网站不被sql注入呢?谢谢大家!急死了!
...全文
208 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mylijie 2008-03-02
  • 打赏
  • 举报
回复
使用Command对象执行SQL语句,而不是使用Connection对象
即避免下面的情况
select * from table where name='"&name&"'
而使用
select * from table where name=?
xiaolei1982 2008-03-02
  • 打赏
  • 举报
回复
我晕论坛怎么改成这个样了,越来越娱乐化了
fcuandy 2008-03-02
  • 打赏
  • 举报
回复
1,数字类型用isnumeric检测,或用clng进行转换过滤.
2,日期型参数用isdate检测是否合法.
3,其它类型(主要指文本类)将'转义为''即可.

而替换 sql 的关健字的做法,没有意义(主要是太多的关健字了,你换不完,也没有必要).
cnchart 2008-02-29
  • 打赏
  • 举报
回复
同时要禁止站外提交,禁止get方式请求
xcgh 2008-02-29
  • 打赏
  • 举报
回复
把防SQL注入的代码include到数据库连接页里,注意上传图片要做好限制,图片目录不能执行脚本
md5e 2008-02-29
  • 打赏
  • 举报
回复
主要是防止非法的代码
1楼的已经很详细了,所以不多说了
jspadmin 2008-02-29
  • 打赏
  • 举报
回复
尝试用Xscan扫描下,它能帮你发现很多潜在问题的
tantaiyizu 2008-02-29
  • 打赏
  • 举报
回复
呵呵 ,先顶下一楼。

其实防注入 ,关键是参数要过滤 ,一些特殊符号要转义:

一般注入分为一下几种:
1.故意输入特殊字符,得到报错信息,asp的有的可以爆出来服务器路径。
2.利用or and之类绕过where验证,获取本不该出现的数据。
3.若sqlserver执行权限太高 ,可以通过系统存储过程向服务器写文件,运行服务等等。

暂时就想到这么多。。。 其实只要防到99%就不错了。
littlelam 2008-02-29
  • 打赏
  • 举报
回复
对入库的字段进行严格的检测,不要只在客户端检测,也要在服务端检测。
xiaolei1982 2008-02-29
  • 打赏
  • 举报
回复
'对文本进行HTML编码过滤,并导入到数据库,代替   
Function outHTML(str)
Dim sTemp
sTemp = str
outHTML = ""
If IsNull(sTemp) = True Then
Exit Function
End If
sTemp = Replace(sTemp, "&", "&")
sTemp = Replace(sTemp, "<", "<")
sTemp = Replace(sTemp, ">", ">")
sTemp = Replace(sTemp, Chr(34), """)
sTemp = Replace(sTemp, Chr(10), "<br>")
sTemp = replace(sTemp,chr(39),"’")
sTemp = replace(sTemp,chr(37),"‰")
outHTML = sTemp
End Function

'对数据库取出代码进行编码解析
Function inHTML(str)
Dim sTemp
sTemp = str
outHTML = ""
If IsNull(sTemp) = True Then
Exit Function
End If
'sTemp = Replace(sTemp, "&", "&")
sTemp = Replace(sTemp, "&", "&")
'sTemp = Replace(sTemp, "<", "<")
sTemp = Replace(sTemp, "<", "<")
'sTemp = Replace(sTemp, ">", ">")
sTemp = Replace(sTemp, ">", ">")
'sTemp = Replace(sTemp, Chr(34), """)
sTemp = Replace(sTemp, """, Chr(34))
'sTemp = Replace(sTemp, Chr(10), "<br>")
sTemp = Replace(sTemp, "<br>", Chr(10))
'sTemp = replace(sTemp, Chr(39),"’")
sTemp = replace(sTemp, "’",Chr(39))
'sTemp = replace(sTemp, Chr(37),"‰")
sTemp = replace(sTemp, "‰",Chr(37))
inHTML = sTemp
End Function

'防SQL注入
sub autiSql
Dim GetFlag Rem(提交方式)
Dim ErrorSql Rem(非法字符)
Dim RequestKey Rem(提交数据)
Dim ForI Rem(循环标记)
ErrorSql = "'|;|and|(|)|exec|update|count|*|%|chr|mid|master|truncate|char|declare" Rem(每个敏感字符或者词语请使用半角 "~" 格开)
ErrorSql = split(ErrorSql,"|")
If Request.ServerVariables("REQUEST_METHOD")="GET" Then
GetFlag=True
Else
GetFlag=False
End If
If GetFlag Then
For Each RequestKey In Request.QueryString
For ForI=0 To Ubound(ErrorSql)
If Instr(LCase(Request.QueryString(RequestKey)),ErrorSql(ForI))<>0 Then
response.write "<script>alert(""警告:\n请不要使用敏感字符"");location.href=""/"";</script>"
Response.End
End If
Next
Next
Else
For Each RequestKey In Request.Form
For ForI=0 To Ubound(ErrorSql)
If Instr(LCase(Request.Form(RequestKey)),ErrorSql(ForI))<>0 Then
response.write "<script>alert(""警告:\n请不要使用敏感字符"");location.href=""/"";</script>"
Response.End
End If
Next
Next
End If
end sub

28,390

社区成员

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

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