防范SQL注入的几种方法 1

简介:

主题防范SQL注入的几种方法近来,网络上的SQL Injection 漏洞利用攻击,JS脚本,HTML脚本攻击似乎逾演逾烈.陆续的很多站点都被此类攻击所困扰,并非像主机漏洞那样可以当即修复,来自于WEB的攻击方式使我们在防范或者是修复上都带来了很大的不便。HOOO…… 一个站长最大的痛苦莫过于此.自己的密码如何如何强壮却始终被攻击者得到,但如何才能做到真正意义上的安全呢?第一,别把密码和你的生活联系起来;第二,SupermasterPWD最好只有你自己知道;第三,绝对要完善好你的网站程序。然而怎样才能完善,这将是我们此文的最终目的。 



安全防护,如何做到安全防护?想要防护就要知道对方是如何进行攻击。有很多文章都在写如何攻下某站点,其实其攻击的途径也不过是以下几种:


1. 
简单的脚本攻击

此类攻击应该属于无聊捣乱吧。比如java script:alert(); </table>等等,由于程序上过滤的不严密,使攻击者既得不到什么可用的,但又使的他可以进行捣乱的目的。以目前很多站点的免费服务,或者是自身站点的程序上也是有过滤不严密的问题。

2. 
危险的脚本攻击

这类脚本攻击已经过度到可以窃取管理员或者是其他用户信息的程度上了。比如大家都知道的cookies窃取,利用脚本对客户端进行本地的写*作等等。

3. Sql Injection 
漏洞攻击

可以说,这个攻击方式是从动网论坛和BBSXP开始的。利用SQL特殊字符过滤的不严密,而对数据库进行跨表查询的攻击。比如:

[url]http://127.0.0.1/forum/showuser.a ... p;and 1=1 [/url]

[url]http://127.0.0.1/forum/showuser.a ... p;and 1=2 [/url]

[url]http://127.0.0.1/forum/showuser.asp?id=999 ... lt;>[/url](select count(*) from admin) 

[url]http://127.0.0.1/forum/showuser.asp?id=999[/url]’; declare @a sysname set @a='xp_'+ 

'cmdshell' exec @a 'dir c:\\'---&aid=9 


得到了管理员的密码也就意味着已经控制的整站,虽然不一定能得到主机的权限,但也为这一步做了很大的铺垫。类似的SQL Injection攻击的方式方法很多,对不同的文件过滤不严密所采取的查询方式也不同。所以说想做好一个完整的字符过滤程序不下一凡功夫是不可能的。

4. 
远程注入攻击

某站点的所谓的过滤只是在提交表格页上进行简单的JS过滤。对于一般的用户来说,你大可不必防范;对早有预谋的攻击者来说,这样的过滤似乎根本没作用。我们常说的POST攻击就是其中一例。通过远程提交非法的信息以达到攻击目的。


通过上面的攻击方法的介绍,我们大致的了解了攻击者的攻击途径,下面我们就开始重点的介绍,如何有效的防范脚本攻击!

让我们还是从最简单的开始:

防范脚本攻击 

JS
脚本 HTML脚本攻击的防范其实很简单:server.HTMLEncodeStr)完事。当然你还不要大叫,怎么可能?你让我把全站类似<%=uid%>都加过滤我还不累*?为了方便的过滤,我们只需要将HTML脚本和JS脚本中的几个关键字符过滤掉就可以了:程序体(1)如下:


以下是过滤函数 

<% 

function CHK(fqyString) 

fqyString = replace(fqyString, ">", ">") 

fqyString = replace(fqyString, "<", "<") 

fqyString = replace(fqyString, "&#", "&") 

fqyString = Replace(fqyString, CHR(32), "
  ") 

fqyString = Replace(fqyString, CHR(9), " ") 

fqyString = Replace(fqyString, CHR(34), """) 

fqyString = Replace(fqyString, CHR(39), "'") 

fqyString = Replace(fqyString, CHR(13), "") 

fqyString = Replace(fqyString, CHR(10) & CHR(10), "</P><P> ") 

fqyString = Replace(fqyString, CHR(10), "<BR> ") 

CHK = fqyString 

end function 

%> 

以下是应用实例 

<%=CHK(Username)%> 

Username=CHK(replace(request(“username”),”’”,””)) 

使用Include把函数写在公有页面上,这样效率是最好的。 


程序体(1 


另外,值得我们注意的是,很多站点在用户注册,或者是用户资料修改的页面上也缺少脚本的过滤,或者是只在其中之一进行过滤,注册进入后修改资料仍然可以进行脚本攻击。对用户提交的数据进行检测和过滤,程序体(2 如下:


以下是过滤函数 

If Instr(request("username"),"=")>0 or 

Instr(request("username"),"%")>0 or 

Instr(request("username"),chr(32))>0 or 

Instr(request("username"),"?")>0 or 

Instr(request("username"),"&")>0 or 

Instr(request("username"),";")>0 or 

Instr(request("username"),",")>0 or 

Instr(request("username"),"'")>0 or 

Instr(request("username"),"?")>0 or 

Instr(request("username"),chr(34))>0 or 

Instr(request("username"),chr(9))>0 or 

Instr(request("username"),"
")>0 or 

Instr(request("username"),"$")>0 or 

Instr(request("username"),">")>0 or 

Instr(request("username"),"<")>0 or 

Instr(request("username"),"""")>0 then 

response.write "
朋友,你的提交用户名含有非法字符,请更改,谢谢合作 <a href='java script:window.history.go(-1);'>返回</a>" 

response.end 

end if 


程序体(2 

为了提供工作效率我们再将过滤内容程序化,这样对多个参数的过滤效率将有很大程度上的提高:如 程序体(3


以下为程序主体 

dim Bword(18) 

Bword(0)="?" 

Bword(1)=";" 

Bword(2)=">" 

Bword(3)="<" 

Bword(4)="-" 

Bword(5)="’" 

Bword(6)="””" 

Bword(7)="&" 

Bword(8)="%" 

Bword(9)="$" 

Bword(10)="'" 

Bword(11)=":" 

Bword(12)="|" 

Bword(13)="(" 

Bword(14)=")" 

Bword(15)="--" 

Bword(16)=" chr(9)" 

Bword(17)=" chr(34)" 

Bword(18)=" chr(32)" 

errc=false 

以下是应用实例部分 

for i= 0 to ubound(Bword) 

if instr(FQYs,Bword(i))<>0 then 

errc=true 

end if 

next 

if errc then 

response.write "<script language=""java script"">" 

response.write "parent.alert('
很抱歉!您的*作违法了);" 

response.write "history,back();" 

response.write "</script>" 

response.end 

end if 


程序体(3 




















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

相关文章
|
2月前
|
SQL 安全 数据库
Python Web开发者必学:SQL注入、XSS、CSRF攻击与防御实战演练!
【7月更文挑战第26天】在 Python Web 开发中, 安全性至关重要。本文聚焦 SQL 注入、XSS 和 CSRF 这三大安全威胁,提供实战防御策略。SQL 注入可通过参数化查询和 ORM 框架来防范;XSS 则需 HTML 转义用户输入与实施 CSP;CSRF 防御依赖 CSRF 令牌和双重提交 Cookie。掌握这些技巧,能有效加固 Web 应用的安全防线。安全是持续的过程,需贯穿开发始终。
55 1
Python Web开发者必学:SQL注入、XSS、CSRF攻击与防御实战演练!
|
6天前
|
SQL JavaScript 前端开发
【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无法输出问题
【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无法输出问题
|
2月前
|
SQL 运维 安全
WAF如何防御SQL注入?
【7月更文挑战第25天】WAF如何防御SQL注入?
109 9
|
2月前
|
JSON 数据格式 SQL
SQL开发问题之直接使用join方法在处理字符串类型属性时可能会遇到性能问题如何解决
SQL开发问题之直接使用join方法在处理字符串类型属性时可能会遇到性能问题如何解决
|
2月前
|
SQL 安全 数据库
从入门到精通:Python Web安全守护指南,SQL注入、XSS、CSRF全防御!
【7月更文挑战第25天】在Python Web开发中确保应用安全至关重要。以下是针对SQL注入、XSS与CSRF攻击的防护策略及示例代码
49 6
|
2月前
|
SQL 安全 数据库
|
2月前
|
SQL 存储 安全
Python Web安全大挑战:面对SQL注入、XSS、CSRF,你准备好了吗?
【7月更文挑战第25天】在Python Web应用开发中,安全至关重要,需防范如SQL注入、XSS与CSRF等攻击。**SQL注入**风险可通过避免直接拼接用户输入至SQL语句,改用参数化查询来缓解。**XSS**则需对用户输入的内容进行HTML转义处理,防止恶意脚本执行。对于**CSRF**,实现包括生成并验证CSRF令牌在内的防护机制是关键。综合运用这些防御策略能显著增强应用的安全性,但需持续学习以对抗不断变化的威胁。
56 5
|
13天前
|
SQL 移动开发 Oracle
SQL查询连续六天数据记录的技巧与方法
在数据库查询中,实现针对连续几天(如连续六天)的数据筛选是一个常见且稍具挑战性的任务
下一篇
云函数