防范SQL注入的几种方法 3

简介:

对于一些整机使用的站点来说防止通过80端口攻击而直接拿到整机管理权限,这一点就变得至关重要了。对xp_cmdshell 的过滤就成为首要,很多站点的程序都是用GET或者是GETPOST混合来提交数据的,对于此,我们给出一种防止GET进行SQL注入的程序:如程序体(5



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 "<script language=""java script"">" 

response.write "parent.alert('
很抱歉!你正在试图攻击本服务器或者想取得本服务器最高管理权!将直接转向首页..');" 

response.write "self.location.href="http://blog.77169.com/default.asp";" 

response.write "</script>" 

response.end 

end if 


程序体(5 

我要做点声明的是:以上的程序只是对GET方式提交的数据进行的过滤,千万不要盲目套用。

像其他一些来自 ASP request 对象 (RequesRequest.QueryStringRequest.FormRequest.Cookies Request.ServerVariables) 的用户输入的攻击方法的方法,大致都集中在脚本期望的输入变量是数字变量 (ID) 上,当然我们不能只看数字变量,比如:


[url]http://127.0.0.1/systembbs/showtopic.asp?tid=99& ... and left[/url](userpasswor 

d,1)='a 

[url]http://127.0.0.1/systembbs/addtopic.asp?tid=99&a ... sp;and userpasswor [/url]

d=’or’’=’ 


另外,如何单一的防止类似这样的注入错误?


[url]http://127.0.0.1/systembbs/addtopic.asp?tid=99[/url]’ ;delete forum_forum;--&page=33 


防范程序程序体(6)

……addtopic.asp?action=add…… 

……addtopic.asp?action=delect…… 


Action1=trim(Request.QueryString())
if left(action1,7)<>"action=" then '
限定querystring必须为 action=
error(err01)'
错误处理
else
action=Request.querystring("action")'
取得querystring的值
end if
select case action'
querystring进行处理
case "add"
.....
case "delete"
......
case else '
如果querystring没有这个值则进行错误处理
error(err02)
end select 


程序体(6) 


出现这样的攻击,使我们的站长们不得不又再次头痛,这里我可以给出大家一个解决最好办法,一般的来说,用户名长度字符数不会超过15个字符,大都为14字符。那么我们从长度出发,来进行过滤:如程序体(7


Name=replace(name,”’”,””) 

If len(name)>16 then 

Response.write “ 
你要做什么?” 

Response.end 

End if 


程序体(7 

为什么我们这里以及过滤了单引号,怎么还要再次取一个长度限制呢?不多说了,看看4ngel的文章先<<饶过'限制继续射入>> .别问我怎么转数字格式,我不会,嘿嘿…^_^!


还继续回到我们的主题,” 脚本期望的输入变量是数字变量 (ID)”.怎样进行注入防范,天呐,方法太多了,最直接的就是判断是否是数字整型,还有一些比较个*的验证办法,我们一一介绍一下 :程序体(8)


,判断数字是否是整型 

p_lngID = CLng(Request("ID")) 

 取字长 这一点我相信一般的数据长度不会大于8位所以

If len(ID)>8 then 

response.write “bedpost” 

response end 

end if 

 我认为这是一种比较冒险的办法,就是再进行一次数据库的查询,如果数据库表内没有相同的值与之相同那么返回错误

sql = "SELECT NAME FROM Category where ID="&ID 

set temp=conn.Execute(SQL) 

if temp.bof or temp.eof then 

response.Redirect("index.asp") 

else 

cat_name=temp("name") 

end if 

set temp=nothing 





















本文转自loveme2351CTO博客,原文链接:http://blog.51cto.com/loveme23/8412 ,如需转载请自行联系原作者



相关文章
|
12天前
|
SQL 关系型数据库 MySQL
怎么通过第三方库实现标准库`database/sql`的驱动注入?
在Go语言中,数据库驱动通过注入`database/sql`标准库实现,允许统一接口操作不同数据库。本文聚焦于`github.com/go-sql-driver/mysql`如何实现MySQL驱动。`database/sql`提供通用接口和驱动注册机制,全局变量管理驱动注册,`Register`函数负责添加驱动,而MySQL驱动在`init`函数中注册自身。通过这个机制,开发者能以一致的方式处理多种数据库。
|
18天前
|
SQL 安全 关系型数据库
SQL 注入神器:SQLMap 简单使用
SQL 注入神器:SQLMap 简单使用
|
26天前
|
SQL 存储 Java
如何避免SQL注入攻击?
如何避免SQL注入攻击?
|
1月前
|
SQL 关系型数据库 MySQL
MYSQL根据查询结果删除sql 去除重复id 新增对比前一条与后一条数据 去重3种方法​ 窗口函数
MYSQL根据查询结果删除sql 去除重复id 新增对比前一条与后一条数据 去重3种方法​ 窗口函数
|
1月前
|
SQL 安全
jeecg-boot sql注入漏洞解决
jeecg-boot sql注入漏洞解决
110 0
|
1天前
|
SQL 存储 大数据
SQL查询方法
【6月更文挑战第17天】SQL查询方法
7 2
|
2天前
|
SQL 关系型数据库 MySQL
SQL优化方法有哪些?
【6月更文挑战第16天】SQL优化方法有哪些?
8 5
|
2天前
|
SQL 安全 Java
Spring Boot中的跨站点脚本攻击(XSS)与SQL注入防护
【6月更文挑战第15天】在现代Web应用程序开发中,安全性是一个至关重要的课题。跨站点脚本攻击(XSS)和SQL注入是最常见的两种攻击类型,它们可以严重威胁到应用程序的安全。
9 0
|
13天前
|
SQL 监控 安全
sql注入取数据库
SQL注入是一种攻击技术,用于在SQL查询中注入恶意代码,从而绕过安全措施,获取、修改或删除数据库中的数据。这种行为是非法的,并且严重违反了网络安全和隐私原则。我不能提供关于如何进行SQL注入的指导或
|
15天前
|
SQL 数据库 关系型数据库
【SQL注入】 注入神器sqlmap的使用
数据库 SQL注入漏洞 sqlmap
51 2