Web安全漏洞及安全防护
一、Web安全概述
搭建一个Web应用不仅要考虑其功能与性能的完善性,更要考虑其安全性。Web应用搭建好以后,在暴露于外网的情况下是否是安全的?是否会遭受攻击者的攻击?是否对敏感数据、敏感代码及敏感后台等敏感信息都进行了安全防护?若这些都做到了,是否就万无一失了?若出现了网络攻击事件,是否又有人愿意为其买单?
攻防是一个不断演进的对抗过程。随着黑客攻击技术的发展,其危害足以使一个正常运行的网站遭受灭顶之灾。为了保障Web系统的正常运行,网站所有者及运维人员均希望通过良好的防护手段,抵御来自互联网的攻击行为。Web防护技术应运而生。
传统的防护手段基本集中在防御Web漏洞上,如SQL注入、XSS、上传攻击等。但是对业务流程中的漏洞防护,则没有太有效的解决方案。因为每个网站的业务流程均不同,所以无法直接确定利用哪种防护手段更加有效。
下面我们首先了解一下Web安全主流漏洞。
二、Web安全主流漏洞
1、CSRF
(1)概述
用户端与服务器端利用HTTP协议进行交互,并利用请求-响应的方式开展Web应用。在这个过程中,如果用户端发出的请求可被伪造,那么会带来危险的后果,这就是请求伪造漏洞。跨站请求伪造(Cross-Site Request Forgery, CSRF)完全不同于XSS攻击。XSS攻击侧重于获取用户的权限及信息,而CSRF则是攻击者可伪造当前用户的行为,让目标服务器误以为请求由当前用户发起,并利用当前用户权限实现业务请求伪造。
(2)Java防范
为了保护 MVC 应用程序,Spring 为每个生成的视图添加了一个 CSRF 令牌。这个令牌必须在每个修改状态的 HTTP 请求(PATCH、POST、PUT 和 DELETE—— 不是 GET)上提交给服务器。这可以保护我们的应用程序免受 CSRF 攻击,因为攻击者无法从他们自己的页面获取此令牌。
从 Spring Security 4.x 开始,默认启用 CSRF 保护。此默认配置将 CSRF 令牌添加到名为_csrf的HttpServletRequest属性中。
如果我们的无状态 API 使用基于令牌的身份验证,例如 JWT,并不使用 cookie 身份验证,我们可以关闭CSRF保护,如果使用cookie则不要关闭它。
关于Java框架的CSRF的示例非常多,这里不进行赘述。
2、XSS
(1)概述
XSS攻击(跨站脚本攻击的简称)是指攻击者利用网站程序对用户输入过滤不足的缺陷,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。其英文全称为Cross Site Scripting,原本缩写应当是CSS,但为了和层叠样式表(Cascading Style Sheet, CSS)有所区分,安全专家们通常将其缩写成XSS。
跨站脚本攻击本质上是一种将恶意脚本嵌入到当前网页中并执行的攻击方式。通常情况下,黑客通过“HTML注入”行为篡改网页,并插入恶意JavaScript(简称JS)脚本,从而在用户浏览网页的时候控制浏览器行为。这种漏洞产生的主要原因是网站对于用户提交的数据过滤不严格,导致用户提交的数据可以修改当前页面或者插入了一段脚本。通俗来说,网站一般具有用户输入参数功能,如网站留言板、评论处等。
攻击者利用其用户身份在输入参数时附带了恶意脚本,在提交服务器之后,服务器没有对用户端传入的参数做任何安全过滤。之后服务器会根据业务流程,将恶意脚本存储在数据库中或直接回显给用户。在用户浏览含有恶意脚本的页面时,恶意脚本会在用户浏览器上成功执行。恶意脚本有很多种表现形式,如常见的弹窗、窃取用户Cookie、弹出广告等,这也是跨站攻击的直接效果。
XSS攻击通常在用户访问目标网站时或者之后进行某项动作时触发并执行。根据攻击代码的存在地点及是否被服务器存储,并且根据XSS攻击存在的形式及产生的效果,可以将其分为以下三类。
1)反射型跨站攻击:涉及浏览器—服务器交互。
2)存储型跨站攻击:涉及浏览器—服务器—数据库交互。
3)DOM型跨站攻击:涉及浏览器—服务器交互。
(2)反射型XSS
存在反射型XSS漏洞的页面只是将用户输入的数据通过URL的形式直接或未经过完善的安全过滤就在浏览器中进行输出,会导致输出的数据中存在可被浏览器执行的代码数据。由于此种类型的跨站代码存在于URL中,因此黑客通常需要通过诱骗或加密变形等方式,将存在恶意代码的链接发给用户,只有用户点击以后才能使攻击成功实施。
(3)存储型XSS
存储型XSS脚本攻击是指Web应用程序将用户输入的数据信息保存在服务端的数据库或其他文件形式中,网页进行数据查询展示时,会从数据库中获取数据内容,并将数据内容在网页中进行输出展示。只要用户访问具有XSS攻击脚本的网页时,就会触发攻击效果,因此存储型XSS具有较强的稳定性。
存储型XSS脚本攻击最为常见的场景就是在博客或新闻发布系统中,黑客将包含恶意代码的数据信息直接写入文章或文章评论中,所有浏览文章或评论的用户就会被黑客在他们的客户端浏览器环境中执行插入的恶意代码。
(4)基于DOM的XSS
严格意义上来讲,基于DOM的XSS攻击并非按照“数据是否保存在服务器端”来划分,其从效果上来说也算是反射型XSS。但是这种XSS实现方法比较特殊,是由JavaScript的DOM节点编程可以改变HTML代码这个特性而形成的XSS攻击。不同于反射型XSS和存储型XSS,基于DOM的XSS攻击往往需要针对具体的JavaScriptDOM代码进行分析,并根据实际情况进行XSS攻击的利用。但实际应用中,由于构造语句具有较大的难度,且实现效果及要求较为苛刻,因此较为少见。
(5)XSS漏洞的标准防护方法
(6)如何防范
1、前端比如vue等,采用第三方防御XSS攻击插件并通过配置白名单。
2、同时后端,如Java可自定义过滤器Filter拦截,或用springframework的HtmlUtils对html标签进行转义。
3、总结起来就是过滤特殊字符、HTML Encode、使用更加严格的转义规则、HttpOnly。
3、sql注入
(1)概述
SQL注入是指攻击者通过把恶意SQL命令插入到Web表单的输入域或页面请求的查询字符串中,并且插入的恶意SQL命令会导致原有SQL语句作用发生改变,从而达到欺骗服务器执行恶意的SQL命令的一种攻击方式。
SQL注入攻击已经多年蝉联OWASP高危漏洞的前三名,可见SQL注入的危害程度。SQL注入会直接威胁数据库的数据安全,因为它可实现任意数据查询,如查询管理员的密码、用户高价值数据等。严重时会发生“脱库”的高危行为。更有甚者,如果数据库开启了写权限,攻击者可利用数据库的写功能及特定函数,实现木马自动部署、系统提权等后续攻击。总体来说,SQL注入的危害极为严重,应掌握攻击原理,并根据实际业务情况选择合适的防护方案。
计算机没有人脑那么智能,无法自动识别用户提交的SQL查询内容的真实目的。因此,只能利用以下传统手段来避免SQL注入漏洞。
1)采用黑名单、白名单等形式对用户提交的信息进行过滤,一旦发现用户参数中出现敏感的词或者内容,则将其删除,使得执行失败。
2)采用参数化查询方式,强制用户输入的数据为参数,从而避免数据库查询语句被攻击者恶意构造。
在对抗SQL注入攻击方面,有效的措施是过滤/转义,或者将参数进行预编译或进行参数化查询。在实际Web系统中,推荐从潜在的SQL注入漏洞点对数据的限制进行入手,尽可能限制数据类型(如强制转义为数字),限制提交查询的字符类型;再者对各类注入中的特殊字符及敏感函数进行严格过滤。这种方法适合中小站点,开发成本小且易实现。针对大型站点,推荐利用预编译方法或参数化查询,可有效避免SQL注入漏洞的产生。
(2)Java防范
SQL注入的防护方法包括参数过滤和预编译处理。参数过滤分为数据类型限制和危险字符处理。通俗地说就是:要么严防死守,细致检查;要么严格限定参数的有效范围(参数化查询)。总之就是要尽可能限制用户可提交参数的类型。
1、最简单的解决方案就是使用PreparedStatement来执行查询,它会将对sqk语句进行预先编译。
2、使用mybatis防止sql注入,mybatis启用了预编译功能,尽量使用#,尽量少用$;
4、SSRF
(1)概述
服务器请求伪造漏洞由攻击者构造形成,并由服务器发起请求的一类计算机安全漏洞。服务器请求伪造漏洞攻击的主要目标是从外网无法访问的内网系统,正是因为它是由服务器发起的,所以能够请求到与它相连而与外网隔离的内网系统。简而言之,服务器请求伪造漏洞攻击是通过窜改获取资源的请求发送给内部服务器实现的,但是内部服务器并未判断这个请求是否合法就以它的身份来访问其他内部服务器的资源。另外,补充一点,跨站脚本漏洞(XSS)、跨站请求伪造漏洞(CSRF)及服务器请求伪造漏洞(SSRF),这三类安全漏洞攻击的共同之处都是由于服务器程序对用户提交的请求数据过滤不严或者过于信任所导致的。
而其不同之处在于,跨站脚本漏洞攻击的成因是服务器程序对用户提交的请求未进行安全过滤,从而导致浏览器在渲染服务器程序返回的HTML页面时,用户提交的恶意JavaScript代码或者HTML代码被执行;
跨站请求伪造漏洞攻击的成因是服务器程序未对用户提交的数据进行随机值校验且对HTTP请求包内的Refer字段校验不严,导致攻击者可以利用用户本地的Cookie伪造用户请求发送至服务器程序;
服务器请求伪造漏洞攻击的成因是服务器程序对用户提交的URL过于信任而没有对用户提交的URL进行地址限制及安全过滤,导致攻击者可以此为跳板刺探内网信息或者渗透内网。
(2)防范措施
导致SSRF漏洞的主要原因在于服务器对用户提供的URL或调用远程服务器的返回信息没有进行验证及过滤,导致传入服务器的数据可能存在其他非正常行为。而且这类非正常行为会被执行和回显。
针对这类情况,有效的防护手段包括:
1)双向过滤用户端参数,严格限定输入参数、返回结果的数据类型及内容。
2)限制请求行为端口,并针对具有服务器请求业务的网络范围进行严格划分。
3)针对内网地址添加黑\白名单,参考以上实例。
4)尽可能实现业务集中化调用,并尽量减少这类直接发起主动请求的业务行为。
总体来说,SSRF漏洞在防护手段方面更为单一,并且漏洞的危害范围及影响也小于XSS等。针对SSRF漏洞防护,最合理的措施是从开发阶段就针对服务器的主动请求行为进行统一规划及防护,从而有效解决上述问题。
5、文件上传漏洞
(1)概述
在Web应用中,每个人都会接触到上传功能,以头像上传功能最为常见。例如,用户可利用上传功能上传个人照片或图片,从而自定义头像。在这个过程中,用户会上传自己的信息(通常是文件,部分情况下为远程图片地址),服务器接收到用户端的上传信息后会按照业务流程进行处理,并在后续页面中显示。
文件上传攻击是指攻击者利用Web应用对上传文件过滤不严的漏洞,将应用程序定义类型范围之外的文件上传到Web服务器,并且此类文件通常为木马,在上传成功后攻击者即可获得当前的webshell。
(2)防范措施
服务器端的检查最好使用白名单过滤的方法,黑名单极不可靠;
使用随机数改写文件名和文件路径。文件上传如果要执行代码,需要用户能够访问到这个文件。应用了随机数改写了文件名和路径,可防止大小写绕过、双后缀、多后缀等手段,将极大地增加攻击的成本;
文件上传目录设置为不可执行,只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响。
只允许特定的文件类型——通过限制允许的文件类型列表,您可以避免将可执行文件、脚本和其他潜在的恶意内容上传到您的应用程序。
上传时对用户进行身份验证——为了提高安全性,要求用户在上传文件之前对其进行身份验证是一种很好的做法。
使用安全设备防御,恶意文件千变万化,隐藏手法也不断推陈出新,对普通的系统管理员来说可以通过部署安全设备来帮助防御。
6、逻辑漏洞
逻辑漏洞指由于代码在设计时考虑不全所产生的逻辑上的漏洞,具体有任意金额支付、任意用户注册、任意密码重置及短信炸弹等。逻辑漏洞形成的原因是代码在做判断时,考虑的情况不全面。由于逻辑漏洞一般和业务紧密联系,而安全扫描工具基本无法扫描出逻辑漏洞,因此,还是需要人工进行全面、细致的渗透测试才能检测出来。
三、推荐几个安全测试工具
1、Burp Suite
Burp Suite Professional 是一款信息安全从业人员必备的集成型的渗透测试工具,软件通过了最先进的扫描技术,可以让用户查看到最新的漏洞,并不断提高安全测试的能力。软件使用后可以帮助用户快速进行渗透测试操作,并且可执行所有的测试,能够无缝地进行从基础分析到发现弱点和漏洞的各种测试操作,用户可以通过单独的应用程序来测试每个项目,并且值得注意的是基本上所有的测试都是自动完成的。
2、Fiddler
Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件)。 Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式。
3、kali
我们平时所使用的渗透测试工具大部分都被集成在kali里面,kali基本上是一个渗透测试的框架,里面集成了许多渗透测试的工具。
Kali Linux是一个基于Debian的Linux发行版,旨在进行高级渗透测试和安全审计。Kali Linux包含数百种工具,适用于各种信息安全任务,如渗透测试,安全研究,计算机取证和逆向工程。Kali Linux由公司Offensive Security开发,资助和维护。
4、Nessus
Nessus 是全世界最多人使用的系统漏洞扫描与分析软件。总共有超过75,000个机构使用Nessus 作为扫描该机构电脑系统的软件。
5、CSRFTester
CSRFTester工具的测试原理大是使用代理抓取我们在浏览器中访问过的所有的连接以及所有的表单等信息,通过在CSRFTester中修改相应的表单等信息,重新提交,相当于一次伪造客户端请求,如果修测试的请求成功被网站服务器接受,则说明存在CSRF漏洞,当然此款工具也可以被用来进行CSRF攻击。
Web安全漏洞及安全防护相关推荐
- 限制会话id服务端不共享_【干货分享】Web安全漏洞深入分析及其安全编码
阅读: 13,003 超全Web漏洞详解及其对应的安全编码规则,包括:SQL注入.XSS.CSRF.文件上传.路径遍历.越权.XML以及业务安全等,实例告诉你各个漏洞对应的编码规则.给你的代码加把安全 ...
- (43.1)【web应用漏洞发现】漏洞平台、开发框架、CMS漏扫工具
目录 WEB应用漏洞探针 一.已知CMS 1.1.漏洞平台 1.1.1.cnvd 1.1.2.seebug 1.1.3.exploit-db 1.1.4.Github-offensive-securi ...
- 安全狗技术分享|Web应用防火墙之攻击防护
一旦我们正式把web应用上线后,web应用就暴露在公网的环境中,随之则会产生访问和流量,我们最常开放的80端口和443端口就有可能被探测到随之就有可能被自动化工具扫描甚至被监控和攻击,那么怎么防护这些 ...
- Web 应用漏洞攻防
Web 应用漏洞攻防 实验目的 了解常见 Web 漏洞训练平台: 了解 常见 Web 漏洞的基本原理: 掌握 OWASP Top 10 及常见 Web 高危漏洞的漏洞检测.漏洞利用和漏洞修复方法: 实 ...
- 2020年网络安全漏洞态势报告-Web应用漏洞
Web应用漏洞 2020年的"全面推进互联网+,打造数字经济新优势"背景下,数字化经济发展促进了基于互联网的数字化系统和创新应用程序的快速增长.同时由于网络攻击技术和目标类型的更新 ...
- WEB编辑器漏洞手册.zip
WEB编辑器漏洞手册.zip 点击进入高速下载通道 转载于:https://www.cnblogs.com/gwrjy/p/7157680.html
- Web应用漏洞评估工具Paros
Web应用漏洞评估工具Paros Paros是Kali Linux集成的一款Web应用漏洞评估工具.该工具提供HTTP会话分析.网络爬虫.漏洞扫描三大功能.首先借助HTTP代理模式,该工具可以实时嗅探 ...
- 被忽视的Web安全漏洞:如何识别和解决?
在Web安全方面,面对各种安全漏洞,IT和安全专业人员通常采取防御措施,而缺少积极主动的措施. 在各种类型和规模的企业中,有些网络安全人员(包括CIO和其他高管)称他们会定期扫描其网站和应用.有些人称 ...
- web安全漏洞加固方案简析
2019独角兽企业重金招聘Python工程师标准>>> 本文比较粗糙,作用是引领大家认识web安全漏洞并根据自己参与的安全加固工作提供一些解决思路. 开始--安全扫描报告 Web应用 ...
最新文章
- 贪心算法———房间搬桌子
- Flickr 的开发者的 Web 应用优化技巧(转)
- 安装windows2003+SQL Server2005集群
- android开发 常用技巧
- PTA 06-图2 Saving James Bond - Easy Version (25分)
- Horizon8基础环境准备08——CA证书
- Hadoop1.0.4单节点StandAlone及Pseudo-Distributed部署方法
- [Linux + 深度学习]Ubuntu18.04 深度学习环境配置
- 【转】UnityVS(Visual Studio Tools For Unity)的安装与使用
- 计算机网络:逆向工程(精细版)
- matlab应用书pdf下载,MATLAB及Mathematica软件应用 pdf epub mobi txt 下载
- 数据分析方法论之RFM模型详解
- 各大搜索引擎登陆入口
- bilibili DR_CAN 现代控制理论 and 非线性控制理论 and 浙大 最优控制
- 把你的Windows Media Player 打造成全能的播放器
- 详细讲解RNN+LSTM+Tree_LSTM(Tree-Long Short Term Memory)基于树状长短期记忆网络
- js下载文件的方法(H5、PC)(小程序)
- 微信小程序的页面导航
- Macbook系统清洁工具Mac加速工具CleanMyMac安装简单清理彻底
- CV学习笔记 | CV综述 [2020.10.01]
热门文章
- linux bootrom ftp,H3C交换机通过以太口应用ftp方式升级bootrom软件
- 【Python 实战基础】如何绘制直方图分析张三成绩数据
- 甲子光年推出中国低代码行业分析报告:本地私有化部署占比超过一半
- Android仿学习强国填空题考试界面
- 在html中主要支持的音频格式,html5中audio支持音频格式
- 踩坑NVIDIA Jetson TX2、Ubuntu16.04、ROS Kinetic安装
- 前端百题斩【006】——js中三类字符串转数字的方式
- HarmonyOS/OpenHarmony 双击返回与退出App
- 有道笔记Markdown快捷键
- 计算机网络几种常见协议