• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

脚本攻击防范策略完全篇

发布: 2007-7-02 21:50 | 作者: admin | 来源: | 查看: 8次 | 进入软件测试论坛讨论

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

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

1. 简单的脚本攻击
此类攻击应该属于无聊捣乱吧。比如javascript :alert(); </table>等等,由于程序上过滤的不严密,使攻击者既得不到什么可用的,但又使的他可以进行捣乱的目的。以目前很多站点的免费服务,或者是自身站点的程序上也是有过滤不严密的问题。
2. 危险的脚本攻击
这类脚本攻击已经过度到可以窃取管理员或者是其他用户信息的程度上了。比如大家都知道的cookies窃取,利用脚本对客户端进行本地的写操作等等。
3. Sql Injection 漏洞攻击
可以说,这个攻击方式是从动网论坛和BBSXP开始的。利用SQL特殊字符过滤的不严密,而对数据库进行跨表查询的攻击。比如:
http://127.0.0.1/forum/showuser.asp?id=999 and 1=1
http://127.0.0.1/forum/showuser.asp?id=999 and 1=2
http://127.0.0.1/forum/showuser.asp?id=999 and 0<>(select count(*) from admin)
<%
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=javascript :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=``javascript``>`
response.write `parent.alert(很抱歉!您的操作违法了);`
response.write `history,back();`
response.write `</script>`
response.end
end if

[1]     

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网