三种常见的Web漏洞及其防护技术研究

2021-03-07 10:34江科
网络安全技术与应用 2021年10期
关键词:攻击者语句漏洞

◆江科

三种常见的Web漏洞及其防护技术研究

◆江科

(川北医学院 四川 637000)

本文对SQL注入攻击漏洞、XSS漏洞、文件上传漏洞三种常见的Web 漏洞的利用原理进行了分析,并以PHP开发环境为例,对其防范技术作了一定的研究和总结。以期软件开发人员能在编码过程中更加严谨,提高软件产品的安全性,以便信息系统管理人员能了解基本的漏洞利用原理,有针对性地开展网络安全工作。

SQL注入漏洞;XSS漏洞;文件上传漏洞;PHP;网络安全

1 引言

普通高校信息系统一般不存在关键信息基础设施,来自较为丰富资源的威胁源的攻击相对较为少见。通过我校网络安全防护设备日志记录分析得出,恶意攻击者对我校Web系统较多的攻击方式是通过软件对目标系统进行扫描和嗅探,契机对发现的漏洞进行利用,其中,对SQL注入攻击漏洞、XSS漏洞、文件上传漏洞的嗅探频次较高,虽然这三个漏洞的利用技术门槛较低,但危害较大。因此,本文以PHP开发环境为例,对这三种漏洞的原理分析和防护技术研究作一定的研究,以促进普通高校网络安全管理工作的水平提升。

2 SQL注入攻击漏洞

2.1 攻击原理分析

SQL注入攻击源于英文“SQL Injection Attack”,具有广泛性、隐蔽性、门槛低、变种多、危害大等特点[1]。其原理是利用开发者拼接SQL语句的编码漏洞,发送特殊的数据到数据库执行,以期到达绕过身份验证、窃取和破坏数据、脱库乃至取得控制器等非法目的。

以身份验证为例,用户在前端Html表单中填写账号和密码,通过发送Http POST方法发送到服务器端进行验证,服务器端使用获取到的POST数据拼接SQL语句发送到数据库进行查询,如果存在匹配记录则通过验证,反正则不通过。

一个典型的存在SQL注入攻击漏洞的SQL语句如下拼接:

Select * From Admin Where Name=’{$_POST[name]}’ and Password=’ {$_POST[password]}’

正常情况下,用户输入用户名为admin,密码为Password时,执行的SQL语句为:

Select * From Admin Where Name=’ admin’ and Password=’ Password’

看上去逻辑没有问题,但攻击者可以发送一些特殊的数据即可轻松欺骗程序,比如把Password填写为“any’ or ‘1=1”,则执行的SQL语句为:

Select * From Admin Where Name=’admin’ and Password=’any’ or ‘1=1’

本例利用SQL 语句使用对称单引号来限定文本值这一语法特性,在文本值中再插入两个单引号,扰乱原有语法结构,增加SQL语句的条件值“or ‘1=1’”。很明显,增加的条件值1=1恒定为True,因此无论Name和Password是什么值,整个条件值都是True,都能查询到匹配记录并通过身份验证从而进入系统,产生严重威胁。

SQL注入攻击远不止利用单引号这一方法:“#”、“%”、“like”等关键词和函数等都可以被利用,尤其是函数注入将产生较大危害,其注入原理和本例类似,可以类推。

2.2 防范措施

SQL注入攻击的防护总纲领就是一条:不信任任何客户端发送的数据。在编码过程中,对客户端发送的数据进行层层检测和过滤,确定合法后再发送到数据库执行,主要措施有以下4条:

(1)严格检查和过滤输入字符串

通常情况下,服务器端需要接受客户端数据的值类型只会是一种或少数几种,很少情况下需要任意形式的数据。因此,可以限定接收数据的值类型。比如只需要值类型为数字的数据,可通过is_numeric()函数判断,也可使用set_type()转换,还可使用max()、int_val()等函数直接过滤;又比如字母,可使用ctype_alpha ()函数进行检测,总之,经过检测和过滤的合法数据才进入程序的下一个流程。

(2)转义

在数据检查和过滤之后、发送到数据库之前对数据进行转义,有语法意义的特殊字符将被转换为该字符的文本值,不作为语法处理,比如“’”转义后为“”,“”才是单引号在SQL语句中的文本值。推荐使用各数据库编程接口专门的转义函数而不是php内置的addslashes()函数进行转义,相对更完善和安全,比如使用PDO类的quote()方法。

(3)使用预处理语句

SQL注入漏洞普遍存在的根本原因是字符串拼接SQL语句的编码方式极易发生数据检查、过滤和转义的疏忽。使用预处理语句则可规避此问题,本例经改造后核心代码如下:

$sth = $dbh->prepare(“Select * From Admin Where Name=? and Password=?”);

$sth->execute([$name,$password]);

预处理语句可理解为SQL 语句模板,预先准备好并使用占位标记“?”(存在多种形式)代替将要被执行的真实数据,当execute()方法执行时,以参数形式绑定的数据将逐一取代对应的占位标记,最后发送到数据库执行。这种方式完全避免了字符串拼接,不仅程序可读性强,而且数据库接口会自动检验,阻止SQL注入,同一预处理语句多次执行的性能也有提高,推荐开发人员使用。

(4)数据库权限限定

给予Web系统能够正常运行的数据库账号最小权限,作为函数式注入的最后防线。通常一般的Web系统只需要select、update、delete和insert等基本的数据库权限,建议开发人员或数据库管理员对给予Web系统的数据库用户或角色进行设置。

3 XSS漏洞

3.1 利用原理分析

XSS全称为跨站脚本(Cross Site Scripting),为了和层叠样式表(Cascading Style Sheets,CSS)区分,业内简称为XSS。XSS漏洞是Web应用的经典漏洞,但直到现在,跨站脚本攻击仍是许多Web应用的最大威胁[2]。其原理通过各种方法向目标Web页面里插入脚本,当其他用户浏览该页面时,嵌入的脚本被执行,达到恶意攻击的目的。

在一个留言本的Web页面上,它允许用户留言,并可以被其他用户看到。如果存在XSS漏洞,攻击者可以留一段特殊的“言”:

于是每位浏览该页面的用户浏览器都会出现一个弹窗,并显示hello word。当然这只是阐述原理的简单示例,并不产生攻击效果,但稍作深入就可以做更多事情,比如盗取身份信息:

thief.js核心攻击代码:

var ca=document.cookie;

script.src='http://example.com/ thief.php?ca='+ca;

简单几行代码即可读取用户的cookie,传送至攻击者服务器进行收集,以进行下一步攻击活动,这就是典型身份盗取攻击。以此原理类推,XSS漏洞还会产生钓鱼诈骗、网页挂马、垃圾信息发送、劫持用户行为等诸多安全威胁。

3.2 防范技术

避免产生XSS漏洞的原则是控制数据输入点和输出点,编码过程中对输入和输出的数据进行过滤和转换,主要措施有以下5条:

(1)在数据输入点的过滤和转换与上文SQL漏洞防范技巧一致,注意输入点的防护不仅仅在POST数据中,任何从客户端发送的数据都可作为XSS攻击使用。

(2)服务器端输出转换:对于完全没有必要在页面上执行HTML和Script的代码的应用场景,在服务器端使用htmlspecialchars()、htmlentities()或第三方RemoveXss()函数进行转换后再输出,确保没有可执行的脚本代码输出到客户端。

(3)客户端输出转换:对于确有必要输出脚本代码到客户端执行、开发JavaScript API等应用场景,在客户端使用定义好的脚本函数进行过滤,如JS中的innerText()、textContent()、innerHTML()函数和jQuery中的text()函数。

(4)设置HTTP内容安全策略:内容安全策略(Content Security Policy,简称CSP)采用白名单作机制限制页面可以包含哪些来源的内容,可在HTTP Header中发送或在HTML meta属性中声明。正确设置CSP后,浏览器会阻止非法来源的外部内容(如上例中的example.com),能够缓解XSS攻击。

(5)在Web服务器配置Cookie的HttpOnly属性,起到在发生XSS攻击防止Cookie被盗取的作用。

上述前3点是笔者推荐必须要做的事情,不可完全依赖于后两点,因为用户浏览器存在多种品牌和多个版本,不完全可信,攻击者可以结合浏览器自身漏洞进行组合攻击。

4 文件上传漏洞

4.1 利用原理分析

很多网站都有文件上传功能,如附件上传、图片上传,攻击者可利用网站自身的文件上传功能,上传木马、病毒、后门程序等至服务器,并伪装成可执行或可解释文件运行,造成信息窃取、破坏,结合其他漏洞就可以轻易获得控制器。成熟的木马、病毒、后门程序能在网络上轻易获取,利用文件上传漏洞进行攻击,上手难度低但威胁非常大,同样需要引起高度重视。

4.2 防范技术

(1)文件扩展名检查:对上传文件的扩展名进行检查,采用白名单机制,只允许需要的文件上传,如:只允许上传扩展名为jpg、png的文件,拒绝其他文件上传。但部分老版本的操作系统存在空格和dot漏洞,老版本的Web服务器也存在解析漏洞,文件扩展名检查可被绕过。

(2)Content-Type检查:每种文件都有唯一的Content-Type,可对上传文件的Content-Type检查确定文件类型,达到只允许需要的文件上传目的。但可以使用相关工具篡改文件的Content-Type,达到欺骗检查程序的目的。

(3)限制Web服务器行为:配置Web服务器和解释器,禁止上传文件保存目录下的文件被解释器解释,禁止特定文件的HTTP访问权限,比如在PHP的doc_root或user_dir中排除掉上传文件保存目录,在Apache中Directory设置中禁止允许的上传文件之外的文件被访问。通过这两点措施,即便非法文件上传,也不能被访问和被解释,可较大程度减少威胁。

(4)限制目录权限:通过服务器操作系统文件系统权限配置上传文件保存目录的权限为只允许读取、写入而不能运行,可以控制病毒木马对操作系统的影响。

(5)安装杀毒/威胁防护软件并及时升级,对上传的文件进行实时检测和病毒查杀。

文件上传漏洞的封堵较为复杂,上述5点不一定完全涵盖,但在实际操作中不能遗漏其中之一。

5 结束语

本文介绍了三种最常见的Web 漏洞,对其原理进行了简要的分析,并对软件编码中需要应用的防范技术进行了研讨,希望软件开发人员能在开发过程严格按规范编码,做到逻辑严密、层层过滤,提高软件产品的安全性,同时也希望信息系统管理人员能了解基本的漏洞利用原理,有针对性地开展网络安全工作。

[1]王云,郭外萍,陈承欢.Web项目中的SQL注入问题研究与防范方法[J].计算机工程与设计,2010,31(05):976-978+1016.

[2]金涛,霍旭磊,王亚丽.XSS的攻击利用与防护策略研究[J].网络安全技术与应用,2021(01):14-16.

[3]武云蕾. Web应用的SQL注入测试工具的设计与实现[D].西安电子科技大学,2019.

[4]秦亚芬. 存储型跨站脚本漏洞关键技术研究与实现[D].北京工业大学,2019.

川北医学院2016年校级科研发展计划项目

猜你喜欢
攻击者语句漏洞
漏洞
机动能力受限的目标-攻击-防御定性微分对策
重点:语句衔接
正面迎接批判
三明:“两票制”堵住加价漏洞
漏洞在哪儿
高铁急救应补齐三漏洞
有限次重复博弈下的网络攻击行为研究
我喜欢
作文语句实录