Web系统安全问题与防护机制研究

2019-11-07 09:18陈刚逯柳
无线互联科技 2019年15期

陈刚 逯柳

摘   要:文章分析了SQL注入、XSS,CSRF、文件上传漏洞等常见Web系统安全问题的攻击方式和原理,并给出了防护机制和解决方法,能有效提高Web系统运作时的安全性和鲁棒性。

关键词:Web系统安全;结构化查询语言注入;跨站脚本攻击;跨站请求伪造攻击;文件上传漏洞

随着互联网的发展,Web系统目前已经成为主要的互联网应用平台,而Web系统的安全性问题越来越突出,造成的损失和影响也越来越大。开放式Web应用程序安全项目(Open Web Application Security Project,OWASP)在2017年公布了十大Web安全漏洞列表[1]。本文对常见Web系统安全漏洞中的攻击原理和方法进行了分析和研究,并给出了相应的防护措施。

1    Web系统安全问题

1.1  SQL注入

结构化查询语言(Structured Query Language,SQL)注入,就是把恶意SQL命令插入到统一资源定位符(Uniform Resource Locator,URL)中或Web表单的输入域中,欺骗服务器执行恶意SQL命令以达到攻击目的。

1.1.1  SQL注入攻击原理

SQL注入攻击是利用Web程序设计上的漏洞或数据库漏洞来进行攻击。Web程序在动态生成SQL语句时没有对用户输入的数据进行验证,攻击者通过构建特殊输入值作为参数传给Web程序,这些输入值一般是合法SQL语句的组合,通过执行这些SQL语句进而执行攻击操作。

1.1.2  SQL注入攻击基本方法

首先,判断Web系统是否具有SQL注入漏洞及漏洞类型。一般在URL后使用单引号、and,or或xor等构建注入语句,如在正常的链接http://xxx/yyy.php&id=num后加单引号:http://xxx/yyy.php&id=num,就能构成基本的SQL注入漏洞存在判断语句。其次,在链接后构建数字型或字符型表达式判断注入点的数据类型,如http://xxx/yyy.php&id=numand‘1=1返回true,而http://xxx/yyy.php&id=num and‘2=1返回false,则能断定注入点的类型为字符型。

在判断Web系统有注入点后,就可以进行数据库、表及字段等信息的获取。如使用注入语句and (Select count(*) from 猜测的表名)<>0或and exists (select * from 猜测的表名),进行表名猜测;猜测出表名后使用语句and (Select count(列名) from 表名)<>0或and exists (select 列名 from 表名)进行字段名猜测。也可以使用数据库内置函数来获得数据库信息,比如使用union select 1, database()获得数据库名,使用union select 1, table_name from information_schema.tables where table_schema=database()获得表名。

在获得数据库基本信息后,就可以使用查询语句得到Web系统的一些关键数据和信息,比如管理员的账号和密码,利用这些信息完成进一步的注入和攻击。

1.2  XSS攻击

跨站脚本(Cross Site Scripting,XSS)攻击,XSS攻击通常指的是利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序[2]。

1.2.1  XSS攻击原理

XSS恶意攻击者在Web页面里插入恶意Script(PHP,js等)脚本代码,当用户浏览该页时,如果服务器端没有对这些数据进行过滤、验证或者编码,恶意脚本代码就会在客户端的浏览器上执行,盗取客户端Cookies等敏感信息,从而达到恶意攻击目的。

1.2.2  XSS攻擊基本方法

XSS攻击分为反射型、持久型和DOM型3种基本方式。

反射型XSS攻击一般以页面表单或URL为途径,使用get或者post方法向服务器端传递包含恶意脚本的数据,或是在URL的查询字符串中包含脚本。

持久型XSS攻击一般以留言板、评论或博客等交互平台为途径,在留言中嵌入恶意代码,并上传存储至服务器中,只要受害者浏览包含此恶意代码的页面,就会执行恶意代码。

DOM型XSS攻击类似于反射型XSS,只是DOM型攻击是通过在网页的DOM树中嵌入恶意脚本来实现的。

1.3  CSRF攻击

跨站请求伪造(Cross-Site Request Forgery,CSRF)攻击通过伪装来自受信任用户的请求而达成攻击。CSRF按照请求方式可分为GET类型和POST类型。按照攻击方式可分为HTML CSRF,JSOM HiJacking和Flash CSRF等类型。

1.3.1  CSRF攻击原理

CSRF攻击者通过技术手段欺骗用户的浏览器去访问已认证过的网站并执行一些恶意操作,因为浏览器之前被认证过,所以服务器会认为这是合法的用户操作而去执行,最终达到攻击目的。

1.3.2  CSRF攻击基本方法

首先,正常用户使用浏览器登录并访问授信网站A,在用户信息通过验证后,网站A生成用户的Cookie信息并返回给浏览器,此时用户成功登录网站A,可给网站A发送正常请求。其次,在用户未退出网站(或者用户Cookie信息没过期)之前,用户在同一浏览器中打开一个恶意网站B,网站B接收到用户请求后,返回一些攻击性代码,并发出访问站点A的请求。再次,浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。最后,网站A并不知道该请求是由网站B发起的,所以会根据用户的Cookie信息以及权限处理该请求,导致来自网站B的恶意代码被执行。

1.4  文件上传漏洞攻击

1.4.1  文件上传漏洞攻击原理

Web应用系统通常具有文件上传功能,如图片发布和文档文件上传等,如果Web系统没有对上传文件的格式和内容进行严格过滤和检查,攻击者就可把包含恶意代码的文件上传到Web服务器上,再通过服务器对文件的解析而达成攻击,上传的文件可以是木马、病毒、恶意脚本或者WebShell等。

1.4.2  文件上传漏洞攻击基本方法

现以漏洞库exploit-db中编号为60560的LibrettoCMS文件上传漏洞为例说明该攻击方法。LibrettoCMS是一款使用PHP和MySQL开发的Web系统,允许用户上传未经验证的文件,并可对已上传的文件名进行修改。首先,攻击者将恶意文件(比如采用PHP语言编写的WebShell后门程序)后缀名改为.doc或.pdf进行上传,上传成功后再将后缀名修改为.php,此时已经将恶意文件上传到Web服务器中,通过浏览器直接访问该文件便可启动该WebShell。其次,通过该WebShell后门程序,攻击者就可以在服务器上执行系统命令,执行任意PHP代码,进行文件的任意操作,包括对数据库的操作。最后,借助该WebShell,攻击者还可擦除攻击过程中留下的痕迹,可将该WebShell隐藏在管理员不易发现的位置,或者上传更多的木马和病毒程序。

2    Web系统安全防护

2.1  SQL注入攻击的防护

使用正则表达式对用户的输入进行校验和过滤;对单引号等特殊字符进行转换等操作;减少动态SQL语句的使用,使用参数化的SQL语句;对数据库中的敏感信息进行加密;使用自定义的错误提示信息。

2.2  XSS攻击的防护

对输入和URL参数进行过滤,检查输入的内容中是否有非法内容,如<>,”,,%,;,()、&和+等特殊字符;对动态输出到页面的内容进行HTML编码,使脚本无法在浏览器中执行;对Session标记、HTTP引用头进行检查;设置Cookie的HttpOnly属性为true。

2.3  CSRF攻击的防护

将持久化的授权方法(例如Cookie或者HTTP授权)切换为瞬时的授权方法,如在每个表单中提供隐藏字段,作为Cookie之外的验证;验证HTTP Referer字段,HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪个地址,在处理敏感数据请求时,Referer字段應和请求的地址位于同一域名下;在请求地址中添加token并验证,由于CSRF的本质在于攻击者欺骗用户去访问自己设置的地址,所以如果要求在访问敏感数据请求时,要求用户浏览器提供不保存在Cookie中,并且攻击者无法伪造的数据作为校验,那么攻击者就无法再进行CSRF攻击。

2.4  文件上传漏洞攻击的防护

Web系统对上传的文件进行重命名,比如上传的文件名和目录名由系统根据一定规则(如上传时间或随机字符串)构成,并将其存放在数据库中,系统使用文件时,通过查询数据库动态获取。禁止用户自定义或修改文件名,将文件上传的目录设置为不可执行,并记录上传文件日志;限制并检查上传文件的类型和大小,比如采用白名单策略,文件扩展名不在白名单中的文件均为不合法,对于白名单中的特定文件,还可采用分析文件头内容的方法来验证文件,如PNG文件头标识为8字节:89 50 4E 47 0D 0A 1A 0A,GIF文件头标识为6字节:47 49 46 38 39(37) 61。

3    结语

Web系统安全问题种类众多,本文仅对常见的安全问题进行了分析。由于Web系统在现实中面临的攻击往往是由多种攻击方式联合构成。因此,在对系统的防护上也要采取综合防护手段,才能有效提高系统的安全性。对于要上线的Web系统,在正式上线前,需要聘请专业的安全团队对系统进行完整的渗透测试,根据测试报告对系统进行整改,经过试运行后才可上线。

[参考文献]

[1]OWASP.2017 OWASP TOP 10[EB/OL].(2017-12-04)[2019-08-10].http://www.owasp.org.cn/owasp-project/2017-owasp-top-10.

[2]苏鹏.跨站点脚本攻击XSS的攻击原理与防护[J].电子科学技术,2014(1):83-87.

Abstract:This paper analyzes the attack mode and principle of common Web system security problems, such as SQL injection and XSS, CSRF, file upload vulnerability, and gives the protection mechanism and solution, which can effectively improve the security and robustness of Web system.

Key words:Web system security; structured query language injection; cross-site request forgery; file upload vulnerability