常见的Web安全漏洞及防御技术
2020-12-30
编者按:Web安全是常见的安全威胁,本文通过介绍几种常见的Web安全漏洞以及相应的防护技术,来增强人们对Web安全的防范意识和能力。
中国互联网络信息中心2020年4月发布的《第45次中国互联网络发展状况统计报告》显示,我国网站数量497万个,网页数量2978亿个,其中动态网页916亿个。
Web系统在带来工作效率提升和生活便利的同时,也带来了诸多安全隐患。本文介绍几种常见的Web安全漏洞以及相应的防护技术。
SQL注入漏洞
目前多数动态Web系统,都会向用户提供可向数据库查询的接口。例如,URL中的参数、网站搜索功能以及用户名密码登录功能等。Web系统执行这些接口功能,通常会用SQL语句向数据库请求查询,以获取相应的内容。如果Web系统对用户输入的内容过滤不严格,那么就容易导致SQL注入攻击。
以用户名密码登录功能为例。用户点击“登录”按钮后,系统执行SQL语句,如果系统对用户输入的账号和密码没有严格过滤,那么黑客在账号和密码框中输入精心设计的语句,即可绕过用户名和密码验证进行登录。
防御方法:对用户提交的参数及数据进行严格过滤;对数值型的参数要判断是否包含字符;对字符型的参数,要对单引号、双引号及连接符等特殊字符进行过滤。此外,PHP、.net、jsp提供参数化查询的方式,把用户输入的参数作为单纯的字符串来处理。
XSS漏洞
XSS漏洞是由于Web系统对用户输入的内容未经有效验证,然后又将这些内容返回给客户端造成的。黑客向含有XSS漏洞的Web页面中插入恶意的script代码或数据,其他用户浏览该页面时,这些恶意script代码或数据就会被执行。黑客通过XSS攻击可以插入恶意链接,获取用户cookie信息。
以留言板为例,留言板典型的工作模式是将用户输入的留言内容显示出来。假设显示某一条留言的代码如下:
。其中“这是我的留言内容”为用户输入的留言信息。如果黑客在留言板中输入恶意代码,客户端运行时将会弹出对话框,从而泄露用户浏览器cookie信息。
防御方法:一是Web系统需要对用户提交的数据进行过滤,比如过滤单引号、连接符以及单书名号等特殊字符;二是前端处理,在需要输出的地方使用HTML实体编码对script标签等敏感字符进行转义。
验证码绕过漏洞
验证码在用户登录,信息提交等情况下使用较多,目的是防止暴力破解攻击以及机器人自动攻击。如果验证码机制设置不当,或者验证码容易被程序自动识别,那么黑客可以绕过验证码发动暴力破击攻击,机器人可以在Web系统中注册大量用户以及发布大量垃圾信息。
常见的验证码绕过漏洞有以下几种情况:一是验证码不刷新,在某一时间段或多页面窗口中验证码相同,用户获取的验证码可以重复使用;二是在Web前端可获取验证码,比如验证码信息隐藏在网页源代码或cookie信息中,黑客通过代码分析或cookie分析即可获取;三是验证码易于识别,黑客可使用自动识别软件等获取验证码信息;四是验证码和用户名密码不同时提交服务器验证,可能泄露服务器反馈信息;五是验证码数量有限,可轻易构造所有验证码。
防御方法:一是验证码及时刷新;二是验证码信息不存放在网页源码中及cookie信息中,从网站后端产生;三是采用不易识别的验证码,比如在验证码图片中加入噪声信息、对验证码错位排列或扭曲变形等;四是验证码和用户名密码同时提交,且后端需先核验验证码,验证码正确后再核验用户名密码;五是增加验证码长度,扩展验证码组合数量。
文件上传漏洞
多数Web系统都具有上传功能,比如用户头像上传、发帖图片上传以及文档存储上传等。有些文件上传的功能代码没有对用户上传的文件类型或者后缀名进行限定,使得黑客可以利用上传功能向Web系统上传任意类型的文件,比如木马、病毒或恶意脚本等。通过该漏洞,黑客可以诱骗其他用户下载木马或病毒,也可以获取网站权限或者服务器权限,危害非常大。
造成文件上传漏洞的主要原因有以下几点。
一是文件上传时没有对文件格式进行检测,或是只在客户端进行文件类型检测,这样容易被黑客绕过检测机制。比如黑客可以通过NC等工具提交文件,导致任意类型的文件都可以上传至Web系统。
二是上传后对文件名处理不当。有些Web系统限定了文件上传类型,但对上传后的文件名限定不严格,从而可以绕过限定。比如,某系统限定了PHP类型的文件上传,但是允许上传doc类型文件。黑客将想要上传的PHP文件后缀名改为doc类型,上传成功后,黑客再将该文件的后缀名改为PHP,从而绕过上传限定。
防御方法:一是采用白名单或黑名单方式,在客户端和服务器端均对上传文件的类型进行限定,不允许上传限定类型以外的其他类型文件;二是禁止修改上传文件的后缀名,防止通过更改后缀名方式绕过上传限定机制;三是将存储上传文件的目录设置为只读,禁止Web容器解析该目录下的文件,以此限定上传文件的执行。
结语
在Web系统开发及部署过程中,程序开发人员及网络管理人员往往注重系统功能的实现而忽视安全防护。因此,相关人员要增强安全意识,从代码编写及服务器配置方面加强Web系统安全性能,杜绝各类安全漏洞。