改进的SQL防注入(加强抑错)
作者:垃圾猪 来源:cfaq 发布时间:2008-03-02 16:14:00
标签:注入,sql,安全
ASP防注入之解决方案
特殊页面处理
因为有些页通过流式传递(比如含有文件上传的表单)
如果单一使用穷举Form对象的操作就会出错
所以要把这些页面过滤出来,同时在页面中使用sql("检测的字串")才行
将本页用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=JavaScript>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


猜你喜欢
- 网站管理员们经常会面对诸多需要帮助用户重定向到其他页面的情况。不幸的是,对任意目的地开放的重定向很可能被滥用。这是一个防不胜防的滥用形式,因
- 在编写Shell脚本时,我们需要会用到各种各样的特殊符号,通过这些特殊符号可以使我们编写的代码更加简洁和高效,这里给大家汇总下:1、{} 大
- 一、目的本地写好一个Flask应用,用Docker封装,上传至自己的服务器,完成部署。流程图:二、实验环境本地:Windows10 1909
- 网页抓取优先策略也称为“页面选择问题”(page Selection),通常是尽可能地首先抓取重要性的网页,这样保证在有限的资源内尽可能地照
- 据Google站长博客报道,Google目前允许网站管理员自行修改sitelinks(网站附加链接)。所谓的sitelinks(网站附加链接
- 前言不同版本的动态库可能会不兼容,如果程序在编译时指定动态库是某个低版本,运行是用的一个高版本,可能会导致无法运行。Linux上对动态库的命
- 一直以来,都不是很愿意在Blog上谈及自己的工作,因为不愿意太过于评论一些事情,毕竟做事情做好才是第一位的,简单的说三道四是没有用处。但是现
- 概要 本文分步介绍如何使用 Internet 信息服务 (IIS) 5.0 授予对 Web 内容的 Web 服务器权限。 您可以对服务器
- 现在所谓的做网站已经不是像以前那种用网页制作软件制作几个html文件,然后互相串联一下就可以了。随着互联网技术的发展和推动,cms的时代的来
- 忘掉静态的标语式广告吧。在线广告已经发展到了集成有视频、游戏、动态内容的迷你应用软件(widget)。人们非常喜欢widget,将它们整合在
- 网站付款标准版(Website Payment Standard简称WPS)是基于HTML的PayPal集成解决方案。如果你需要简单快速地在
- 在过去的10年,架设一个大型网站是一个非常艰巨的任务,那可不是非专业人士可以完成的。现在好了,亚马逊开放了他们的服务器架构,一切都改变了。
- 前言先安装Docker,使用文内的脚本可以快速创建CentOS 7.8虚拟系统集群,并通过SSH(Secure Shell)远程工具连接。创
- a)准备工作和建立内容在你注册域名之前,你就应该记录下你的想法,应该准备足够100个网页的内容。请注意是至少。这100个网页应该是真正的内容
- 由于Apache具有相当高的可移植性,它支持超过30种操作系统,包括Unix、Windows 及Darwin等系统,所以目前在网络上已注册的
- 防火墙(Firewall)是在一个可信的网络和不可信的网络之间建立安全屏障的软件或硬件产品。Linux操作系统内核具有包过滤能力,系统管理员
- 当 VPS 出现问题的时候,就需要和 VPS 服务商联系,希望能尽快解决问题。这里涉及到一个如何和 VPS 服务商沟通的问题。其实沟通是一门
- 11月26日下午消息,据香港联交所资料显示,腾讯控股(0700.HK)两高管于11月23日进行减持,其中执行董事兼CTO张志东于11月23日
- 场景公司项目部署在docker中,由于未知原因容器偶尔会停止,需要写一个脚本监控 容器运行状态,如果容器停止了,就再启动该容器shell脚本
- 微软发布了 Visual Studio 2010 和 .NET Framework 4.0 的Beta 2测试版,微软往Framework