APP下载

基于Web的酒店点评系统安全测试研究

2016-12-26乾,侯

电子科技 2016年12期
关键词:脚本攻击者漏洞

苏 乾,侯 俊

(上海理工大学 光电信息及计算机工程学院,上海 200093)



基于Web的酒店点评系统安全测试研究

苏 乾,侯 俊

(上海理工大学 光电信息及计算机工程学院,上海 200093)

为防范基于Web应用程序的漏洞攻击,文中对一个Web页面的酒店点评系统安全性能进行了测试。研究了该酒店点评系统在运行中各个环节上出现的Web应用程序漏洞。针对其中3种主要漏洞:SQL注入、跨站脚本攻击及跨站请求伪造,根据其产生原理和攻击过程,提出了过滤特殊字符和加密关键传递参数的防御方法,并给出相应的程序代码。测试结果显示,该酒店点评系统能有效地防范Web应用程序漏洞,提高了系统的安全性。

Web酒店点评系统;SQL注入;跨站脚本攻击;跨站请求伪造

漏洞是指信息系统中的软件、硬件或通信协议中存在缺陷或不适当的配置,从而可使攻击者在未授权的情况下访问或破坏系统,导致信息系统面临安全风险[1]。2014年,CNVD(国家信息安全漏洞共享平台)收集新增漏洞9 163个,包括高危漏洞2 394个(占26.1%),中危漏洞6 032个(占65.8%),低危漏洞737个(占8.1%)。最新数据显示,仅2015年11月,CNVD共协调处置了2 311起涉及我国政府部门以及银行、民航等重要信息系统部门以及电信、传媒、公共卫生、敃育等相关行业的漏洞事件[2],可见对Web漏洞的研究和防范迫在眉睫。

本文设计了一个用php实现的Web酒店用户评论展示系统,基本页面展示近期用户点评,允许用户在游客状态下填写评论后发表,经系统过滤保存评论内容后在页面展示,另外选择管理员登陆,在验证账号密码后可执行对点评的删除等操作,该系统功能实现流程如图1所示。

图1 实现功能流程图

该系统的点评留言功能及登录功能在互联网上得到了广泛应用,同时也存在多处高危漏洞,这些漏洞引起的安全隐患,会暴露用户的详细信息、允许恶意用户执行任意的数据库查询,甚至允许通过远程命令行访问服务器,从而造成对Web 应用程序的破坏或用户隐私信息被窃取。本文分析漏洞出现的原理,对该酒店点评系统进行测试,改进代码,以实现能对漏洞进行防范的功能。

1 SQL注入攻击及安全防范

SQL注入(SQL Injection)攻击是指恶意用户输入用来影响被执行的SQL脚本[3]。由于Web端应用程序没有对用户输入数据的合法性进行判断,数据服务器运行恶意SQL命令后,通过和数据库交互从而获得私密信息,因此使数据库信息遭到破坏。

一种脚本注入式的攻击方式是攻击者在Web页面的输入区域,如表单的输入区域或页面请求查询的字符串,输入别有用心构造的SQL语句插入特殊字符和指令,提交后的数据会被数据服务器误认为是将要执行的指令语句。

在本酒店点评系统中,管理员需在Web应用程序的登录验证(login)页面登陆后才能对用户点评进行删除等操作, 管理员需要输入用户名(username)以及对应的密码(password)进行登录操作,应用程序通过用户提交的这两个参数来进行操作,其原理是通过查找原本建立好userstable中的用户名(username)和匹配密码(password)的结果进行授权访问,经典的SQL指令形式为

select*from userstable where username=’admin’ and password=’admin’

若攻击者给username赋值“abc’ or 1=1 -- ”,将其输入提交给服务器后,服务器将执行由其构造出来的指令,SQL指令形式变成

select*from userstable where username=’abc’ or 1=1 -- and password=’abc’

该语句中执行了两个判断,只要其中一个条件成立,则返回正确的授权,同时由于语句中的“1=1”在逻辑上是永远成立的,“--”表示后面所有的语句为注释语句,因此这语句是恒成立的,导致应用程序不能正确验证用户身份,会错误授权攻击者访问。

为了防范此类攻击方式,系统采用对输入用户名信息进行过滤的方法,其详细代码如下

Function Inputcheck()

{ if (instr(request(“$username”),”’”)>0 or instr(request(“$username”),”or”)>0) then

reponse.write”

response.end

end if

}

此段功能函数对输入的用户名当中是否含有“’”和“or”字符进行识别,若存在非法字符则返回相关提示,以防止用户恶意利用此漏洞获得管理员登录权限。

另一种攻击方式是基于当一个查询指令被拒绝后,数据库会返回包含有调试信息的错误消息,从而使攻击者可通过返回的信息得到应用程序的数据库以及漏洞参数。通常通过输入不匹配的URL进行攻击,如

正确URL:http://www.hotel.com/manage/?id =2

SQL注入:http://www.hotel.com/manage/?id =2’

此时如果应用程序返回错误信息

Select name FROM userstable WHERE id=2’

则攻击者可从返回的信息中得到:username、userstable、id字段名等私密信息从而进行更为精确的漏洞攻击。为防范此类型的漏洞攻击,需要对HTTP请求的参数进行检测,本系统中添加了一段用于过滤请求参数的代码,存储于一个公共的php文件中便于其他文件的调用,其代码如下

foreach($_POST as $post_sql>=$post_post)

{ if(is_numeric($var_getvalues))

$_POST[strtolower($post_sql)] = intval($post_post);

else

$_POST[strtolower($post_sql)] = addslashes($post_post);

}

foreach($_GET as $get_sql>=$get_get)

{ if(is_numeric($var_getvalues))

$_GET[strtolower($get_sql)] = intval($get_get);

else

$_GET[strtolower($get_sql)] = addslashes($get_get);

}?>

当用户向访问的Web页面提交参数时,通过上述代码,利用intval()与addslashes()分别对提交的数据信息$_POST和$_GET中的整形参数及字符型参数进行转换,能有效地防止SQL参数注入的攻击。

SQL注入漏洞对Web应用造成损坏巨大,同时也有相应的检查措施,分为入侵前的检测和入侵后的检测。入侵前的检测可通过手工方式,也可使用SQL注入软件,主要目的是为了预防SQL注入攻击。而对于入侵后的检测,主要是查看审计日志,SQL注入漏洞攻击成功后,会在IIS日志和数据库中留下“痕迹”。比如在Web服务器中启用日志记录,则IIS日志会记录下访问者的IP地址等信息,SQL注入通常会大量访问一个页面,通过查看日志文件的大小以及日志内容便可判断是否曾经发生SQL注入攻击[4]。

对SQL注入的防御措施,主要从检验提交信息的有效性入手,主要总结如下几个方面:限制数据输入及查询字符的长度,检测关键字和特殊字符;将用户输入的危险字符进行过滤或转义;去除代码中的敏感信息;对数据信息进行封装和加密处理;指定错误返回页面以及限制数据库的访问权限等。

2 跨站脚本攻击及安全防范

HTML是Web页面的一种基本描述语言,同时HTML中也可嵌入其他的脚本语言,比如“”。当浏览器遇到起始标签[5]。若用户填写了相关的内容提交,若没有相应的过滤,就会导致跨站脚本XSS(Cross-Site Scripting Attack)漏洞的出现[6]。

在本文的酒店点评系统中,发表点评功能对游客状态的用户开放,用户在填写点评后点击发表,随后将保存的点评展示在点评列表中,但若用户恶意输入一些脚本语言代码,例如:,而系统没有对点评内容没有过滤,点击发表评论后,系统并没有把用户输入的代码显示在点评列表上,而是已执行Java脚本语句的方式弹出消息框提示“warning!”。

[7],XSS的实现过程如图2所示。

图2 XSS漏洞攻击流程

根据HTML页面引用用户输入的形式,XSS攻击大致分为3类:存储型的XSS、反射型的XSS和基于DOM的XSS[8-9]。

存储型的XSS(stored XSS),最常检测的到漏洞出处就是类似留言、评论这种Web页面。攻击者通常直接将脚本代码输入到被攻击Web站点的表格中,当其他用户来访问这个页面时,输入的脚本并非以静态数据显示,而是作为指令代码开始执行。

唐山市21个水功能区中10个水功能区设为禁止设置入河排污口水域:大黑汀水库水源地保护区;潵河河北承德、唐山保留区;沙河河北秦皇岛饮用水源区;龙湾河河北唐山饮用水源区;泉水河河北唐山饮用水源区;陡河河北唐山饮用水源区;还乡河河北唐山饮用水源区1;引滦专线天津水源地保护区1;小青龙河北唐山农业用水区;还乡河河北唐山饮用水源区2。

反射型XSS(reflected XSS),就是将脚本文件嵌入到URL地址的CGI参数中,攻击者将链接发送给潜在的受害者;当受害者点击链接时,页面被下载,但其中的内容被嵌入在URL中的脚本修改了。在此过程中,只有用户在点击了被篡改过的链接时,页面载入过程中才执行完成。

基于DOM 的XSS攻击,其是通过修改Web页面DOM节点数据信息而形成的漏洞攻击。例如一段JavaScript代码访问一个URL请求参数并使用此信息添加到自己的页面,但这个信息未使用HTML的实体编码,就可能出现XSS漏洞。

XSS攻击所攻击的主要目标并不是Web服务器本身,而是登录网站的用户,其一般不会夺取访问Web服务器的管理权限,XSS攻击的目的是:(1)劫持用户的Web行为,监视浏览历史、表单输入、发送接受的数据,或将目标站点重新定向到钓鱼网站;(2)窃取用户Cookie,获取用户身份,从而获得对网站的操作权限;(3)目前最多的XSS蠕虫攻击,可用来打广告、刷流量、挂木马、破环网站数据等[10]。

因此,需要在发表点评的系统中加入能有效防御XSS漏洞的手段,本例采用str_replace()函数对页面的输入输出内容中的特殊字符进行编码,代码如下

FUNCTION code_filter($cMyString)

{ $cMyString = trim($cMyString);

$cMyString = str_replace(“"”,”””, $cMyString);

$cMyString = str_replace (“@@is”,””,$ cMyString);

$cMyString = str_replace (“@@is”,””,$ cMyString);

$cMyString = str_replace (“@@is”,””,$ cMyString);

……

$cMyString = nl2br($cMyString);

Return $cMyString;

}

将输入输出内容出的“””、 “&”等特殊字符以及其他脚本代码进行变换编码,防止了利用脚本语言进行的XSS漏洞攻击。

此外,安全措施还包括以下几个方面:对于将保存的点评的ID等变量,需检查变量初始化,明确变量类型;对于用户提交评论的内容,需添加格式、长度和范围的验证程序;添加用于过滤所有从动态页面输入特殊字符的IIS组件。

3 跨站请求伪造及安全防范

跨站请求伪造(Cross-Site Request Forgery,CSRF),是一种对网站的恶意利用,其是通过伪装来自受信任用户的请求来利用受信任的网站,CSRF攻击往往不太流行和难以防范,所以被认为比XSS更具有危险性[11]。

CSRF攻击通过使应用程序相信此活动的请求来自应用程序的一个可信用户[12],其一般过程如图3所示。

图3 正常用户访问站点

首先Web站点和浏览器之间建立了相互认证的会话,之后只要是通过这个浏览器的认证的会话所发送的请求,都被视作可信任的请求。此时,恶意站点伪造有效请求,发生一个CSRF攻击[13],如图4所示。

图4 遭遇CSRF漏洞攻击

发起攻击的站点致使浏览器向Web站点发送一个请求,然而站点认为来自该浏览器的请求均是经过认证的有效请求,所以执行这个“可信认的请求”。CSRF攻击发生的根本原因是Web站点所验证的是浏览器而非用户本身,通常引发改变用户口令,转移金融财产等重大危机。

在本酒店点评系统中,用户登录管理员后会获得删除一些点评的权限,若管理员需要删除其中一条的点评,只需提交链接

http://www.hotel.com/manage/delete.php?id =1

delete.php?id=2>

那么在管理员重新登录刷新页面之后,便等于提交了如下恶意链接

http://www.hotel.com/manage/delete.php?id =2

此时在管理员不知情的前提下把id为2的点评删除了,从而实现了利用评论系统的CSRF漏洞进行的攻击。

为防范利用这类的漏洞的攻击,本系统采用了与防御XSS漏洞攻击一样的方法,利用str_replace函数将类似标签中的“<”、“>”进行过滤编码,代码如下

$cMyString = str_replace(“<”,”<”, $cMyString);

$cMyString = str_replace(“<”,”<”, $cMyString);

$cMyString = str_replace(“>”,”>”, $cMyString);

$cMyString = str_replace(“>”,”>”, $cMyString);

将这些代码加入到上述code_filter()功能函数当中后便能实现对利用标签进行CSRF漏洞的攻击。

此外需对服务器端的安全防范:(1)GET方法只用于从服务器端读取数据,POST方法用于向服务器端提交或者修改数据。仅使用POST方法提交和修改数据不能完全防御CSRF攻击,但至少增加攻击的难度[14];(2)限制验证Cookie的到期时间,Cookie的合法时间越短,能利用Web应用程序的机会就越少;(3)在关键的服务端远程响应请求之前,增加人机交互环节,例如典型的图片验证码,或者要求用户提交额外的信息,可增加CSRF的攻击难度,额外信息选择无法预测或无法轻易获得的。

4 结束语

该酒店点评系统中的留言和登录等功能已在互联网中得到广泛的应用,经过加入相对应的Web应用程序漏洞的防范措施后,可以杜绝大部分针对Web应用程序漏洞攻击的出现,该酒店管理系统的安全性能得到大幅提升。

[1] 刘笑杭.SQL注入漏洞检测研究[D].杭州:杭州电子科技大学,2014.

[2] CNCERT. 2014年中国互联网网络安全报告[EB/OL].(2015-06-02) [2016-02-22]http://www.cert.org.cn/publish/main/46/index.html.

[3] Chris Anley.Advanced SQL injection in SQL server applications[M].TX,USA:NGSSoftware Insight Security Research(NISR),2002.

[4] 陈小兵,张汉煜,骆力明,等.SQL注入攻击及其防范检测技术研究[J].计算机工程与应用,2007,43(11):150-152.

[5] 田俊峰,杜瑞忠,杨晓晖.网络攻防原理与实践[M].北京:高等教育出版社,2012.

[6] Shar L K,Tan H B K.Auditing the XSS defence features implemented in web application programs[M].NY,USA:Let Software,2012.

[7] 仇新梁,康迪,周涛.Web漏洞扫描系统设计[J].保密科学技术,2011(2):18-20.

[8] 崔德友.浅析XSS脚本攻击与防范策略[J].吉林广播电视大学学报,2014(3):24-25.

[9] Amit Klein. DOM based cross site scripting or XSS of the third kind[M].WK,USA:Web Appliction Security Consortium,2005.

[10] 蒋志初,胡毅.一个WEB漏洞从发现到修补的实例分析[J].网络安全技术与应用,2015(7):14-17.

[11] 季凡,方勇,蒲伟,等.CSRF新型利用及防范技术研究[J].信息安全与通信保密,2013(3):75-76.

[12] 肖红. Web应用漏洞的分析和防御[D].西安:西安电子科技大学,2013.

[13] Xiaoli Lin,Zavarsky P,Ruhl R,et al.Threat modeling for CSRF attacks[C].Japan:International Conference on Computational Science and Engineering,2009.

[14] 张悦,杨学全.基于服务器端CSRF防御模块的设计与实现[J].信息技术与信息化,2014(7):45-46.

Testing and Solution on Security of Web Hotel Comment System

SU Qian,HOU Jun

(School of Optical-Electrical and Computer Engineering, University of Shanghai for Science and Technology, Shanghai 200093, China)

To defend the attacks from Web application program vulnerabilities. This paper focuses on testing the security of a Web hotel comment system, at the same, studies three kinds of Web application program vulnerabilities: SQL injection, cross-site scripting attack and cross-site request forgery, which would occurs in the hotel comment system. Then it analyzes the occurrence principles and attacking processes of those Web application program vulnerabilities, and proposes a safety precaution and solution measure such as filter the special character and encode the transfer parameters. The results show that precaution and solution measure can defend the attacks from Web application program vulnerabilities effectively and enhance the security of a Web hotel comment system.

Web hotel comment system; SQL injection; cross-site scripting attack; cross-site request forgery

10.16180/j.cnki.issn1007-7820.2016.12.041

2016- 02- 22

苏乾(1991-),男,硕士研究生。研究方向:计算机网络及信息安全。

TP277

A

1007-7820(2016)12-148-05

猜你喜欢

脚本攻击者漏洞
酒驾
漏洞
基于微分博弈的追逃问题最优策略设计
安奇奇与小cool 龙(第二回)
数据库系统shell脚本应用
正面迎接批判
快乐假期
三明:“两票制”堵住加价漏洞
漏洞在哪儿
高铁急救应补齐三漏洞