防范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 ,如需转载请自行联系原作者



相关文章
|
29天前
|
SQL 监控 安全
SQL注入的实现原理以及防止
SQL注入的实现原理以及防止
|
2月前
|
SQL 数据库
20、绕过去除and、or、union select、空格的sql注入
20、绕过去除and、or、union select、空格的sql注入
30 0
|
2月前
|
SQL 数据库
小课堂 -- 绕过去除特殊字符的sql注入
小课堂 -- 绕过去除特殊字符的sql注入
21 0
|
2月前
|
SQL Java 数据库连接
[SQL]SQL注入与SQL执行过程(基于JDBC)
[SQL]SQL注入与SQL执行过程(基于JDBC)
50 0
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL进阶之路丨第十四篇】一文带你精通MySQL重复数据及SQL注入
【MySQL进阶之路丨第十四篇】一文带你精通MySQL重复数据及SQL注入
46 0
|
28天前
|
SQL Java 应用服务中间件
Java项目防止SQL注入的四种方案
Java项目防止SQL注入的四种方案
30 0
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
99 1
|
2月前
|
SQL 安全 关系型数据库
接上篇文章,在测试宝塔 WAF 的未授权访问漏洞时无意间还发现了一个 SQL 注入漏洞
接上篇文章,在测试宝塔 WAF 的未授权访问漏洞时无意间还发现了一个 SQL 注入漏洞,品相还不错,可执行任意 SQL 语句。 总之,吃了一惊,一个防 SQL 注入的工具居然也有 SQL 注入漏洞。 请看这段代码
408 1
|
22天前
|
SQL 存储 BI
sql server 2012远程链接的方法及步骤
sql server 2012远程链接的方法及步骤
17 1
|
29天前
|
SQL 安全 测试技术
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
14 0