点击这里给我发消息 点击这里给我发消息 点击这里给我发消息 点击这里给我发消息 点击这里给我发消息 点击这里给我发消息 点击这里给我发消息 点击这里给我发消息 点击这里给我发消息 点击这里给我发消息  
 
 
  网站建设   广州威客   网上商机   网上商城   海讯黄页   网址天地   专区展示   社 区  
 
 
 
首 页  网站建设套餐  我要建站  案例欣赏  网站模板  服务区域  域名查询注册  企业邮局  主机空间  策划推广  海讯优势  客服中心  代理专区
各地分公司: 北京站 | 上海站 | 广州站 | 南宁站 | 郑州站 | 南京站 | 武汉站
   您现在的位置是:海讯集团>>案例欣赏>>类别>>详细内容
建站套餐[全部]
门户型¥5588-88880
购物型¥4688-38000
高级豪华型¥5688-18880
标准型宣传(¥6688)
普及型宣传(¥5888)
基础型宣传(¥4688)
经济型宣传(¥3388)
网站模板
 



asp防注入代码,asp防止另人写入网页代码


http://www.okit88.com    发布日期:2011-7-28 11:12:49    浏览次数:16334     < 返回 >

asp防注入代码,asp防止另人写入网页代码

现在比较流行的SQL注入工具的工作方式是通过GET和POST来完成具体的注入。我们可以将注入时所用到的一切符号过滤掉。那么我们可以通过简单的判断语句来达到目的。我们先来过滤GET吧。
代码如下:
dim sql_injdata SQL_inj SQL_Get
SQL_injdata = "’|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 "<Script Language=&#106avascript>alert(’请不要在参数中包含非法字符尝试注入!’);history.back(-1)</Script>"
Response.end
end if
next
Next
End If
这样我们通过简单的语句我们就把一些注入所必须的语句和符号过滤掉了。非常小巧灵便,只要插到像conn.asp这样类似被调用比较广泛的页面中。同样POST我们也可以通过如下代码过滤,我们可以将两段代码整和到一起。
我们来看看代码吧:
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 "<Script Language=&#106avascript>alert(’请不要在参数中包含非法字符尝试注入! ’);history.back(-1)</Script>"
Response.end
end if
next
next
end if
网上又流行一个加强版的ASP防注代码。
代码如下:
<#

'ASP防注入之解决方案
'特殊页面处理
'因为有些页通过流式传递(比如含有文件上传的表单)
'如果单一使用穷举Form对象的操作就会出错
'所以要把这些页面过滤出来,同时在页面中使用sql("检测的字串")才行
'垃圾猪zero@new57.com
'http://blog.csdn.net/cfaq

 

'将本页用include方法放在头部以让所有页都可以调用,比如include在conn.asp里
'如果有流式上传的页面请把该页加到表page中,以防form冲突


Dim N_no,N_noarray,req_Qs,req_F,N_i,N_dbstr,Conn,N_rs,N_userIP,N_thispage
N_userip = Request.ServerVariables("REMOTE_ADDR")
N_thispage = LCase(Request.ServerVariables("URL"))

N_no = "'|;|and|exec|insert|select|delete|update|count|*|#|chr|mid|master|truncate|char|declare" '可以自己修改怀疑是注入操作的字串
N_noarray = split(LCase(N_no),"|")


Call DBopen()
Call N_check_Qs()
Call N_checkPage()
Call DBCLose()


'检测当前页是否是特殊页是就调用 N_check_form()
sub N_checkPage()

set N_rs = server.CreateObject("ADODB.RecordSet")
N_rs.open "select * from page where spcpage like '#"&N_thispage&"#'",conn,1,1
if (N_rs.eof AND N_rs.Bof) then
Call N_check_form()
end if
N_rs.Close()
set N_rs = nothing

end sub

 

'检测给定字串
sub N_sql(agsql)
'这里是不记录数据库,如果要改请自己修改
N_check "CUS",req_Qs,"OTHER"
end sub

'检测Request.Form
sub N_check_form()
If Request.Form<>"" Then
For Each req_F In Request.Form
N_check req_F,Request.Form(req_F),"POST"
Next
end if
end sub

'检测Request.QueryString
sub N_check_Qs()
If Request.QueryString<>"" Then
For Each req_Qs In Request.QueryString
N_check req_Qs,Request.QueryString(req_Qs),"GET"
Next
end if
end sub

'检测
sub N_check(ag,agsql,sqltype)
For N_i=0 To Ubound(N_noarray)
If Instr(LCase(agsql),N_noarray(N_i))<>0 Then
call N_regsql(ag,agsql,sqltype)
Response.Write "MO"
end if
Next
end sub

'记录并停止输出
'ag 名称
'agsql 内容
'sqltype 类型
sub N_regsql(ag,agsql,sqltype)
if(sqltype<>"OTHER") then
Conn.Execute("insert into SqlIn(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) values('"&N_userip&"','"&N_thispage&"','"&sqltype&"','"&ag&"','"&agsql&"')")
end if
Response.Write "<Script Language=&#106avascript>alert('请不要在参数中包含非法字符尝试注入!');</Script>"
Response.Write "<span style='font-size:12px'>非法操作!系统做了如下记录↓<br>"
Response.Write "操作IP:"&N_userip&"<br>"
Response.Write "操作时间:"&Now&"<br>"
Response.Write "操作页面:"&N_thispage&"<br>"
Response.Write "提交方式:"&sqltype&"<br>"
Response.Write "提交参数:"&ag&"<br>"
Response.Write "提交数据:"&agsql&"</span>"

Response.end
end sub


Sub DBopen()
N_dbstr="DBQ="+server.mappath("Sql.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
Set Conn=Server.CreateObject("ADODB.CONNECTION")
Conn.open N_dbstr
end SUB


Sub DBCLose()
Conn.close
Set Conn = Nothing
End sub
#>
代码说明里面写的很明白将本页用include方法放在头部以让所有页都可以调用,比如include在conn.asp里,如果有流式上传的页面请把该页加到表page中,以防form冲突。代码比前面的严谨的多,而且多了IP记录等功能。

SQL注入漏洞可谓是“千里之堤,溃于蚁穴”,这种漏洞在网上极为普遍,通常是由于程序员对注入不了解,或者程序过滤不严格,或者某个参数忘记检查导致。本人自己也吃过苦头。在这里,我给大家一个函数,代替ASP中的Request函数,可以对一切的SQL注入Say NO,函数如下:

Function SafeRequest(ParaName,ParaType)
'--- 传入参数 ---
'ParaName:参数名称-字符型
'ParaType:参数类型-数字型(1表示以上参数是数字,0表示以上参数为字符)
Dim Paravalue
Paravalue=Request(ParaName)
If ParaType=1 then
If not isNumeric(Paravalue) then
Response.write "参数" & ParaName & "必须为数字型!"
Response.end
End if
Else
Paravalue=replace(Paravalue,"'","''")
End if
SafeRequest=Paravalue
End function
sql注入被那些菜鸟级别的所谓黑客高手玩出了滋味,,发现现在大部分黑客入侵都是基于sql注入实现的
,哎,,谁让这个入门容易呢,好了,,不说废话了,,现在我开始说如果编写通用的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
各个字符用"|"隔开,,然后我们判断的得到的request.querystring
具体代码如下
dim sql_injdata
sql_injdata = "'|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 "<script language=****>alert('天下电影联盟sql通用防注入系统提示↓nn请不要在参数中包含非法字符尝试注入!');history.back(-1)</script>"
response.end
end if
next
next
end if
这样我们就实现了get请求的注入的拦截,但是我们还要过滤post请求,所以我们还得继续考虑request.form,这个也是以数组形式存在的,,我们只需要再进一次循环判断即可。代码如下
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 "<script language=****>alert('天下电影联盟sql通用防注入系统提示↓nn请不要在参数中包含非法字符尝试注入!nnhttp://www.521movie.com/ ');histor ... 115;cript>"
response.end
end if
next
next
end if
好了大功告成,,我们已经实现了get和post请求的信息拦截,,你只需要在conn.asp之类的打开数据库文件之前引用这个页面即可。放心的继续开发你的程序,,不用再考虑是否还会受到sql注入攻击。难道不是么?

 
案例推荐
尚仕高度|广告|公关|传媒|策划|公关策划|尚仕高度公关|CBMC|整合营销|品牌规划|企业规划|广告策划|品牌策划|创意广告
尚仕高度|广告|公关...
关健词:尚仕高度|广告...
百度排名:第一页
[类别-]  [详情]
智能广播|公共广播|专业音响|IP网络广播|校园广播|酒店消防广播|广州市声迪佳电子科技有限公司
智能广播|公共广播|...
关健词:智能广播|公共...
百度排名:第一页
[类别-]  [详情]
珠宝设计网|珠宝设计培训|广州珠宝设计培训|首饰电脑起版培训|JEWELCAD培训|广州博艺珠宝3D设计培训中心
珠宝设计网|珠宝设计...
关健词:珠宝设计网|珠...
百度排名:第一页
[类别-]  [详情]
最新行业报道
· 页面注册指向和返回  - [2013-9-30]
· 记录网页浏览次数,记录浏次数  - [2013-9-30]
· 月份的英文缩写,月份的英文写...  - [2013-9-30]
· 网站制作-输入框只能输入数字  - [2013-9-30]
· QQ客服在页面固定位置的代码  - [2013-9-28]
· flash全屏代码,flas...  - [2013-9-28]
网站建设技术专题
· QQ在线咨询显示未启用,QQ...  - [2013-5-21]
· 点击下载按钮 自动...  - [2013-4-27]
· [88229999]com....  - [2013-1-15]
· 如何查看服务器PID,W3W...  - [2011-12-25]
· 来源W3SVC 事...  - [2011-12-23]
· sql数据库连接语句,sql...  - [2011-12-22]
案例类别
木业、木材加工
会展、设计、策划类
动漫、游戏机、福彩
外语、翻译、律师事务
生物养生、风水易经
家政劳务、搬家、移民
购物类,综合类
政府、行业、门户型
服装、鞋帽、布料
皮具、皮包、文件夹
旅游、机票、酒店
二手车交易、旅游租车
母婴、日用、化妆品
美容、美体、美发
医药、保健、医疗器械
婚庆、礼仪庆典
投资、顾问、咨询
电子、五金、机械
环保、化工、涂料
教育培训、文化、娱乐
房地产、房屋租赁
IT科技、软件、通信
金融、股票保险、财经
建筑、建材、装饰
食品、饮料(酒)、茶叶
家居、家电、电器
工艺品、礼品、鲜花
办公、文教、乐器
广告、包装、雕刻印刷
汽车、物流、汽配
物业、票务、船务
仪器、仪表、保险柜
摄影、冲印、玩具
拍卖、投资、典当
珠宝、首饰品
钟表、眼镜
照明、水电、能源
演艺、体育、文体用品
贸易、出口、报关
宠物、宠物食品
交友网站
音响,影院,器械设备
网站建设技术专题
· QQ在线咨询显示未启用,QQ在线... - [2013-5-21]
· 点击下载按钮 自动更新... - [2013-4-27]
· [88229999]com.te... - [2013-1-15]
· 如何查看服务器PID,W3WP.... - [2011-12-25]
· 来源W3SVC 事件I... - [2011-12-23]
· sql数据库连接语句,sql数据... - [2011-12-22]
· W3wp.exe 进程... - [2011-12-22]
· 服务器CPU占用过高,w3wp.... - [2011-12-22]
· asp图片加水印,asp图片上传... - [2011-7-28]
海讯专题报道
· 怎么制作网页 - [2010-11-27]
· 网页设计职业和前景怎么样呀,网页... - [2010-11-19]
· 要作网页怎么做才好 - [2010-11-19]
· 日子一天天过去 - [2010-11-16]
· 在PHOTOSHOP里边如何用笔... - [2010-11-16]
· 如何创建一个冲击波场景,用PHO... - [2010-11-16]
· 对于文字排版的学习,中国汉字在编... - [2010-11-15]
· 工程师,怎样才能设计一个好的lo... - [2010-11-15]
· 一个商业平面设计师的几点心得 - [2007-3-6]
最新行业报道
· 页面注册指向和返回 - [2013-9-30]
· 记录网页浏览次数,记录浏次数 - [2013-9-30]
· 月份的英文缩写,月份的英文写法 - [2013-9-30]
· 网站制作-输入框只能输入数字 - [2013-9-30]
· QQ客服在页面固定位置的代码 - [2013-9-28]
· flash全屏代码,flash全... - [2013-9-28]
· 域名更改解析后 打不开网站。电脑... - [2013-5-29]
· 360浏览器拦截网站,百度拦截网... - [2013-5-29]
· js中的Mid()函数对应的JS... - [2013-5-21]
域名|邮箱|主机产品
企业邮箱 VPS主机 特惠主机 美国主机 香港主机 欧洲主机 短信网址 中文域名 国际域名
企业邮箱 VPS主机 特惠主机 美国主机 香港主机 欧洲主机 短信网址 中文域名 国际域名
  关于海讯 | 加盟合作 | 服务指南 | 诚聘英才 | 服务项目 | 监督热线 | BBS论坛
版权所有:广州IT服务中心  广州海讯电子科技有限公司 ◎ 2006-2010    服务手机:15918582336
服务电话:020-82161215 020-85832530    地址:广州天河车陂路天隆花园B1栋。(车陂文化广场傍),
地铁车陂南站C出口,大概100米,(车陂公交场正对面,278,B15,B12,548,568路等) 易先生 刘小姐 周先生 宋小姐
常年法律顾问:黄律师 执证号:190001112580    您是第 52163361 位来访者   服务邮箱:okit168@okit88.cn 
网站地址:http://www.okit88.com 国信备案号:粤ICP备07032675号
客服一:710884198  客服二:475145816  客服三: 253549058  客服四:33207742 技术一:358545054  技术二:356525438
在线MSN: okit88@126.com  在线MSN:okit888@126.com    在线MSN:okit8888@126.com
专业提供域名注册、空间租用、FLASH制作、网站建设、网站制作、网管出租、IT外包、网站推广策划