常见Web安全漏洞及修复建议

人生几何,对酒当歌!

内容均来自互联网,风险等级根据实际情况定义

一、sql注入

1.1、漏洞描述

​ SQL注入攻击(SQL Injection),简称注入攻击、SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞。 在设计不良的程序当中,忽略了对输入字符串中夹带的SQL指令的检查,那么这些夹带进去的指令就会被数据库误认为是正常的SQL指令而运行, 从而使数据库受到攻击,可能导致数据被窃取、更改、删除,以及进一步导致网站被嵌入恶意代码、被植入后门程序等危害。

1.2、漏洞危害

​ 1.机密数据被窃取。
​ 2.核心业务数据被篡改。
​ 3.网页被篡改。
​ 4.数据库所在服务器被攻击变为傀儡主机,甚至企业网被入侵。

1.3、解决建议

​ 1.所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。当前几乎所有的数据库系统都提供了参数化SQL语句执行接口,使用此接口可以非常有效的防止SQL注入攻击。
​ 2.对进入数据库的特殊字符(’、and、or、select、union等)进行转义处理,或编码转换。
​ 3.确认每种数据的类型,比如数字型的数据就必须是数字,数据库中的存储字段必须对应为int型。
​ 4.数据长度应该严格规定,能在一定程度上防止比较长的SQL注入语句无法正确执行。
​ 5.网站每个数据层的编码统一,建议全部使用UTF-8编码,上下层编码不一致有可能导致一些过滤模型被绕过。
​ 6.严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害。
​ 7.避免网站显示SQL错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。
​ 8.在网站发布之前建议使用一些专业的SQL注入检测工具进行检测,及时修补这些SQL注入漏洞。

二、XSS(跨站脚本攻击)

2.1 问题描述

​ 跨站脚本攻击(Cross-site scripting,通常简称为XSS)发生在客户端,可被用于进行窃取隐私、钓鱼欺骗、偷取密码、传播恶意代码等攻击行为。 恶意的攻击者将对客户端有危害的代码放到服务器上作为一个网页内容, 使得其他网站用户在观看此网页时,这些代码注入到了用户的浏览器中执行,使用户受到攻击。一般而言,利用跨站脚本攻击,攻击者可窃会话COOKIE从而窃取网站用户的隐私,包括密码。
​ XSS攻击使用到的技术主要为HTML和Javascript,也包括VBScript和ActionScript等。XSS攻击对WEB服务器虽无直接危害,但是它借助网站进行传播,使网站的使用用户受到攻击,导致网站用户帐号被窃取,从而对网站也产生了较严重的危害

2.2 漏洞危害

​ 1.钓鱼欺骗:最典型的就是利用目标网站的反射型跨站脚本漏洞将目标网站重定向到钓鱼网站,或者注入钓鱼JavaScript以监控目标网站的表单输入,甚至发起基于DHTML更高级的钓鱼攻击方式。
​ 2.网站挂马:跨站时利用IFrame嵌入隐藏的恶意网站或者将被攻击者定向到恶意网站上,或者弹出恶意网站窗口等方式都可以进行挂马攻击。
​ 3.身份盗用:Cookie是用户对于特定网站的身份验证标志,XSS可以盗取到用户的Cookie,从而利用该Cookie盗取用户对该网站的操作权限。如果一个网站管理员用户Cookie被窃取,将会对网站引发巨大的危害。
​ 4.盗取网站用户信息:当能够窃取到用户Cookie从而获取到用户身份使,攻击者可以获取到用户对网站的操作权限,从而查看用户隐私信息。
​ 5.垃圾信息发送:比如在SNS社区中,利用XSS漏洞借用被攻击者的身份发送大量的垃圾信息给特定的目标群。
​ 6.劫持用户Web行为:一些高级的XSS攻击甚至可以劫持用户的Web行为,监视用户的浏览历史,发送与接收的数据等等。
​ 7.XSS蠕虫:XSS 蠕虫可以用来打广告、刷流量、挂马、恶作剧、破坏网上数据、实施DDoS攻击等。

2.3 修复建议

​ 1.对所有输入中的script、iframe等字样进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP请求中的Cookie中的变量,HTTP请求头部中的变量等。
​ 2.不仅要验证数据的类型,还要验证其格式、长度、范围和内容。
​ 3.不要仅仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。
​ 4.对输出的数据也要检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行安全检查。
​ 5.在发布应用程序之前测试所有已知的威胁。

三、SSRF(服务端请求伪造)

3.1 问题描述

​ 很多WEB应用都提供了从其他的服务器上获取数据的功能。使用用户指定的URL,web应用可以获取图片,下载文件,读取文件内容等。这个功能如果被恶意使用,可以利用存在缺陷的WEB应用作为代理攻击远程和本地的服务器或获取某此信息。这种形式的攻击称为服务端请求伪造攻击(Server-side Request Forgery)。

3.2 漏洞危害

​ 1.可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息。
​ 2.攻击运行在内网或本地的应用程序(比如溢出)。
​ 3.对内网web应用进行指纹识别,通过访问默认文件实现。
​ 4.攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli等)。
​ 5.利用file协议读取本地文件等。

3.3 修复建议

​ 1.过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
​ 2.统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
​ 3.限制请求的端口为http常用的端口,比如,80,443,8080,8090。
​ 4.黑名单内网ip,避免应用被用来获取获取内网数据,攻击内网。
​ 5.禁用不需要的协议,仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。

四、CSRF(跨站请求伪造)

4.1 问题描述

​ CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。
​ CSRF攻击:攻击者盗用了受害者的身份,以受害者的名义发送恶意请求。CSRF能够做的事情包括:以受害者名义发送邮件,发消息,盗取受害者的账号,甚至于购买商品,虚拟货币转账等。造成的问题包括:个人隐私泄露以及财产安全。

4.2 漏洞危害

​ 1.配合XSS漏洞可造成蠕虫。

​ 2.以受害者的身份修改或发送信息

4.3 修复建议

​ 1.通过token或者session来判断当前用户身份。
​ 2.敏感操作需要验证码,更改密码需要验证老密码。
​ 3.Cookie Hashing(所有表单都包含同一个伪随机值)。
​ 4.One-Time Tokens(不同的表单包含一个不同的伪随机值)。

五、文件包含

5.1 问题描述

​ 文件包含是指程序代码在处理包含文件的时候没有严格控制,导致用户可以构造参数包含远程代码在服务器上执行或、通过包含上传文件或日志在服务器上执行代码、包含服务器上的一些配置文件读取敏感信息,进而获取到服务器权限,造成网站文件被恶意删除或修改,用户和交易数据被篡改等一系列恶性后果。

5.2 漏洞危害

​ 1.攻击者可以利用该漏洞在服务器上执行代码或命令。
​ 2.攻击者可以利用该漏洞读取服务器上包含敏感信息的文件。

5.3 修复建议

​ 1.PHP中可以使用open_basedir配置限制访问限制在指定的区域。
​ 2.对文件路径参数过滤./ \等字符。
​ 3.禁止服务器远程文件包含。

六、任意文件上传/下载/删除

6.1 问题描述

​ 由于对用户上传的文件未进行严格过滤,用户可以把包含某些代码的脚本文件上传到服务器,从而获取WebShell。通过使用WebShell,攻击者可以控制服务器的文件系统,操作数据库,执行系统命令等,从而给目标服务器带来不可逆转的损失。
​ 攻击者通过任意文件下载漏洞可以遍历目标服务器的文件系统,获得某些敏感配置文件或源代码文件的内容。
​ 由于未对用户删除的文件做严格的权限控制或缺乏判断,攻击者通过遍历可以删除网站服务器上的其它文件,从而导致网站停止服务或丢失数据。

6.2 漏洞危害

​ 1.攻击者可以通过上传漏洞获取WebSell从而控制目标服务器。
​ 2.攻击者通过任意文件下载漏洞可以获取服务器上的敏感配置文件或源码文件内容。
​ 3.攻击者通过任意文件删除漏洞可以干扰网站的正常运行导致网站停止服务和丢失数据。

6.3 修复建议

​ 1.对于文件上传可以采用白名单的形式限制上传后缀,同时采用重新随机命名的方式进行重命名。而且应当限制上传目录不可执行源码脚本或程序。
​ 2.对于任意文件下载或删除漏洞可以过滤用户输入参数中的./\等字符,限定可操作的文件在允许的目录范围内。

七、任意代码/命令执行

7.1 问题描述

​ 由于应用对用户传入的参数处理不当,在拼接用户输入的参数到代码/命令中时未进行有效的限制或处理,从而可以将恶意的代码/命令注入到正常的代码/命令中造成代码/命令执行。

7.2 漏洞危害

​ 攻击者可以通过任意代码/命令执行漏洞获取目标服务器的控制权限。

7.3 修复建议

​ 1.对用户输入的参数进行转义和过滤。
​ 2.对已知存在任意代码/命令执行的第三方应用,应采取升级的方式将应用更新。
​ 3.能使用脚本解决的工作,不要调用其他程序处理。对于PHP尽量少用可能造成代码或命令执行的函数,并在disable_functions中禁用。

八、弱口令

8.1 问题描述

​ 弱口令(weak password)没有严格和准确的定义,通常认为容易被别人(他们有可能对你很了解)猜测到或被破解工具破解的口令均为弱口令。弱口令漏洞是指用户采用了容易被攻击者猜测到的口令,导致攻击者以受害者的授权身份进行信息修改、查询、删除或其它操作,从而对用户或系统构成损失。

8.2 漏洞危害

​ 攻击者可以通过弱口令漏洞使用受害者的授权获取内部信息,增、删、修改系统中的一些信息,进行转账操作等危害用户或系统利益的操作。

8.3 修复建议

​ 1.不使用空口令或系统缺省的口令,因为这些口令众所周之,为典型的弱口令。
​ 2.口令长度不小于8个字符。
​ 3.口令不应该为连续的某个字符(例如:AAAAAAAA)或重复某些字符的组合。
​ 4.口令应该为以下四类字符的组合,大写字母(A-Z)、小写字母(a-z)、数字(0-9)和特殊字符。每类字符至少包含一个。如果某类字符只包含一个,那么该字符不应为首字符或尾字符。
​ 5.口令中不应包含本人、父母、子女和配偶的姓名和出生日期、纪念日期、登录名、E-mail地址等等与本人有关的信息,以及字典中的单词。
​ 6.口令不应该为用数字或符号代替某些字母的单词。
​ 7.口令应该易记且可以快速输入,防止他人从你身后很容易看到你的输入。
​ 8.至少90天内更换一次口令,防止未被发现的入侵者继续使用该口令。

九、敏感信息泄漏

9.1 问题描述

​ 敏感信息泄漏是指不为公众所知悉,具有实际和潜在利用价值,丢失、不当使用或未经授权访问对社会、企业或个人造成危害的信息可被恶意用户获取。包括:个人隐私信息、业务经营信息、财务信息、人事信息、IT运维信息等。

9.2 漏洞危害

​ 敏感信息泄漏可能导致用户隐私泄漏,数据库被恶意用户操作,服务器被恶意用户控制等。攻击者也可以通过一些敏感信息的收集为后面的攻击做铺垫。

9.3 修复建议

​ 1.限制一些接口的访问权限,对服务器已泄漏的敏感文件/信息进行删除或加固。
​ 2.在开发及上线前对服务进行统一检查,可有效避免敏感信息的泄漏。
​ 3.对于已经存在敏感信息泄漏的服务则要进行修复和全面的安全检查。

十、目录遍历

10.1 问题描述

​ 目录遍历漏洞是指通过在URL或参数中构造“../”,或“../”和类似的跨父目录字符串的ASCII编码、unicode编码等,完成目录跳转,读取操作系统特殊目录下的文件列表或文件内容。

10.2 漏洞危害

​ 目录遍历漏洞允许恶意攻击者突破Web应用程序的安全控制,直接访问攻击者想要的敏感数据。包括配置文件、日志、源代码、文件列表等,配合其它漏洞的综合利用,攻击者可以轻易的获取更高的权限。

10.3 修复建议

​ 1.对网站用户提交过来的文件名进行硬编码或者统一编码,对文件后缀进行白名单控制,对包含了恶意的符号或者空字节进行拒绝。
​ 2.Web应用程序可以使用chrooted环境访问包含被访问文件的目录,或者使用绝对路径+参数来控制访问目录,使其即使是越权或者跨越目录也是在指定的目录下。

十一、URL跳转

11.1 问题描述

​ 由于应用越来越多的需要和其他的第三方应用交互,以及在自身应用内部根据不同的逻辑将用户引向到不同的页面,譬如一个典型的登录接口就经常需要在认证成功之后将用户引导到登录之前的页面,整个过程中如果实现不好就可能导致一些安全问题,特定条件下可能引起严重的安全漏洞。

11.2 漏洞危害

​ 恶意用户完全可以借用URL跳转漏洞来欺骗安全意识低的用户,从而导致“中奖”之类的欺诈,这对于一些有在线业务的企业如淘宝等,危害较大,同时借助URL跳转,也可以突破常见的基于“白名单方式”的一些安全限制,如传统IM里对于URL的传播会进行安全校验,但是对于大公司的域名及URL将直接允 许通过并且显示会可信的URL,而一旦该URL里包含一些跳转漏洞将可能导致安全限制被绕过。

11.3 修复建议

​ 1.代码固定跳转地址,不让用户控制变量
​ 2.跳转目标地址采用白名单映射机制
​ 3.合理充分的校验校验跳转的目标地址,非己方地址时告知用户跳转风险

十二、非授权访问

12.1 问题描述

​ 非授权访问可以理解为需要安全配置或权限认证的授权页面可以直接访问。

12.2 漏洞危害

​ 1.重要权限可被操作。
​ 2.重要信息泄露。

12.3 修复建议

​ 1.涉及用户操作的功能加强权限验证。

十三、默认配置不当

13.1 问题描述

​ 默认配置不当是指应用在安装配置时未注意到地些潜在的安全风险,导致本不该出现安全漏洞的应用因为配置问题出现了短板,处于易受攻击的状态。

13.2 漏洞危害

​ 配置不当可导致用户或服务器敏感信息泄漏,攻击者也有可能通过此类漏洞直接获取服务器权限。

13.3 修复建议

​ 应用上线前检查应用的安全配置是否规范,在动态的业务中要进行周期性的配置检查确定配置是否符合安全规范。

十四、平行越权

14.1 问题描述

​ 平行越权漏洞是Web应用程序中一种常见的安全漏洞。它的威胁在于一个账户即可控制全站用户数据。当然这些数据仅限于存在漏洞功能对应的数据。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定。

14.2 漏洞危害

​ 一个正常的用户可以通过平行越权操控缺失权限判断的功能,控制其它用户的数据。

14.3 修复建议

​ 1.用户对某一数据进行增删改查时需要去校验下所操作的数据是否属于该用户。

十五、逻辑设计缺陷

15.1 问题描述

​ 设计缺陷/逻辑缺陷的本质就是设计者或开发者在思考问题过程中做出的特殊假设存在明显的或隐晦的错误。

15.2 漏洞危害

​ 1.欺骗密码找回功能。
​ 2.规避交易限制。
​ 3.越权缺陷。
​ 4.cookies和session的问题。
​ 5.顺序执行缺陷(强制浏览)。
​ 6.时间刷新缺陷。

15.3 修复建议

​ 1.应用程序的设计信息要清楚,详细的记录在文档中,以便他人了解(主要是安全检查人员)
​ 2.始终记住用户可以控制请求的每一个方面,他们可以按照任意顺序访问多阶段功能,可以提交畸形数据,可以忽略某些参数,可以伪造某些参数,可以修改某些参数。因此在设计的时候一定尽可能要面面俱到。
​ 3.在安全代码审计的过程中,从各个角度考虑两个因素:应用程序如何处理用户的反常操作和输入的,不同代码组件与应用程序功能之间的相互依赖操作可能造成不利影响。
​ 4.在安全代码审计过程中,考虑设计过程中做的每一个假设,并想象假设被违背的每种情况,尤其注意用户可以完全控制的假设条件。

-------------本文结束感谢您的阅读-------------