web安全漏洞种类
(参考知道创宇)
SQL注入:
SQL注入(SQL Injection),是一个常见的发生于应用程序和数据库之间的web安全漏洞,由于在开发过程中的设计不当导致程序中忽略了检查,没有有效的过滤用户的输入,是攻击者可以向服务器提交不正常的访问数据(即恶意的的SQL命令代码),程序在接收后错误的将攻击者的输入作为代码语句的一部分执行,导致原始的查询逻辑被改变,额外的执行了攻击者静心构造的恶意代码,从而绕过验证机制和权限检查,达到取得隐藏数据或覆盖关键的参值,甚至执行数据库主机操作系统命令的目的。
应对方案:
1、严格限制web应用的数据库的操作权限,给用户提供仅能满足需求的最低权限,从而最大限度的减少注入攻击对数据库的危害。
2、既爱尼察输入的数据是否具有所要求的数据格式,严格限制变量的类型。
3、对进入数据的特殊字符(‘ “ \ <> & *)进行转义处理(或编码转换)
4、不要直接拼接SQL语句,所有的查询语句建议使用数据库提供的参数化查询接口,使用参数化的语句而不是将用户输入的变量嵌入SQL语句中。
5、在应用发布之前建议使用专业的SQL注入检测工具进行检测,及时修补被检测出的SQL注入漏洞。
6、避免网站打印SQL错误信息,比如类型错误、字段不匹配等。
XSS跨站脚本攻击:
跨站脚本漏洞(Cross-site scripting , xss),是一种常见的web安全漏洞,由于web应用未对用户提交的数据做充分的检查过滤,允许用户在提交的数据中掺入HTML代码(最主要的是”>”,”<”),并将未经转义的恶意代码输出到第三方用户的浏览器解释执行,从而导致XSS漏洞。攻击成功后,攻击者可以得到更高的权限、私密网页内容、会话和cookie等内容。
应对方案:
1、针对请求参数以及用户可控数据进行防御,对输出进行编码处理。
2、在服务端对每一个输入进行合法性验证,只允许输入常见符号,字母以及数字。
3、对Cookie添加HttpOnly标识。
CSRF跨站请求伪造:
跨站请求伪造(Cross-site request forgery , CSRF),是一种常见的web安全漏洞,由于在web请求中重要操作的所有参数可被猜测到,攻击者可通过一些技术手段欺骗用户的浏览器去访问一个用户曾经认证过的网站,遂使攻击者可冒用用户的身份,进行恶意操作。
应对方案:
1、在表单中添加一个随机的数字或字母验证码,通过强制用户和应用进行交互,来有效地遏制CSRF攻击。
2、如果检查发现是非正常页面提交的请求(根据Referer进行判断),则极有可能是CSRF攻击。
3、在请求的参数里增加一个随机的token参数,且不可被猜测。
4、敏感的操作应该使用POST,而不是GET,以form表单的形式提交,可以避免token泄露。
越权访问:
越权访问(Broken Access Control , BAC),是一种常见的web安全漏洞,这类漏洞是指应用在检查授权(Authorization)时存在纰漏,使得攻击者可以利用一些方式绕过权限检查,访问或者操作到原本无权访问的界面。在实际的代码安全审查中,这类漏洞往往很难通过工具进行自动化检测,因此在实际应用中危害很大。
应对方案:
1、将用户身份标识存在session中并验证,不能吧用户身份标识以参数形式置于HTTP请求中,应该放在session中,并且仅通过session验证用户身份。
2、禁止从Cookie参数中去判断用户所属用户组,应该通过读取session会话来判断用户所属用户组。
3、文件下载时,禁止采用可被猜测的连续ID为参数进行文件下载,下载文件时也应判断当前用户是否有权限下载目标文件。
4、非普通用户操作页面严格做好权限管理,增删改查操作需要验证当前用户权限。
任意文件上传:
任意文件上传(Unrestricted File Upload),是一种常见的web安全漏洞,由于web应用程序在实现文件上传功能是对上传的文件缺少必要的检查,使得攻击者可上传任意文件。利用该漏洞,攻击者可以直接上传webshell(webShell 就是以asp\php\jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称之为一种网页后门)、病毒、恶意脚本等各种危险文件,可能导致服务器权限被直接获取,从而危及整个系统的安全运行。
应对方案:
1、对用户上传的文件后缀采用白名单进行限制,且重命名文件名。
2、限定文件上传目录,且该目录不允许解析动态脚本文件。
3、更新web服务器版本并进行正确配置,防止解析漏洞。
任意文件读取:
任意文件读取漏洞(Unrestricted File Upload),是一种常见的web安全漏洞,因web程序提供的文件查看下载、附件下载等功能存在安全缺陷,导致通过秀娥该文件路径就能够查看和下载任意文件,这些文件包括:源代码文件、系统文件(/etc/passwd , C:/boot.ini等)、配置文件(config.php , /WEB-INF/web.xml , web.config等),造成网站敏感信息泄露,严重危害网站安全。
应对方案:
1、服务端过滤特殊字符。(…./、 ….\、 ….\\)
2、判断用户输入的参数的格式是否合法。
3、指定文件类型白名单(如:jpg\gif\png\rar\zip\pdf\doc\xls\ppt等),禁止用户读取、下载白名单以外的文件。
4、指定下载路径,禁止用户读取、下载指定目录以外的文件。
任意文件包含:
任意文件包含(Unrestricted File Inclusion),是一种常见的web安全漏洞,web程序在引入文件时,由于传入的文件名没有经过合理的校验或者检验被绕过,从而操作了预想之外的文件,导致意外的敏感信息泄露,甚至恶意的代码注入,使攻击者获取到网站服务器权限。
当被包含的文件在服务器本地时,形成本地文件包含漏洞;被包含的文件在第三方服务器时,形成远程文件包含漏洞。
应对方案:
1、关闭危险的文件打开函数。
2、过滤特殊字符,如:‘.’(点),‘/’(斜杠),‘\’(反斜杠)。
3、对被包含的文件名进行检测,只允许包含特定文件。
任意代码执行:
任意代码执行漏洞(Unrestrcted Code Execution),是一种常见的web安全漏洞,由于web程序没有针对执行函数做过滤,当web程序应用在调用一些能将字符串转化成命令的函数(如PHP中的eval(),system(),exec())时,没有考虑做一些安全限制,导致可以通过构造特殊代码,执行操作系统命令,致使攻击者获取到网站服务器权限。
应对方案:
1、如果因使用的框架或中间件造成远程代码执行漏洞,需及时升级框架和中间件。
2、针对代码中可执行的特殊函数入口进行过滤,尝试对所有提交的可能执行命令的语句进行严格的检查或者对外部输入进行控制,系统命令执行函数,不允许传递外部参数。
3、所有的过滤步骤要在服务器进行,不仅要验证数据的类型,还要验证期格式、长度、范围和内容。
撞库攻击:
撞库攻击(Information Leakage Thinking Library Collision),是一种常见的针对web应用的攻击方式,为了方便记忆很多用户在不同网站使用的同一账号和密码,黑客通过收集网络已泄露的拖库信息,特别是注册用户和密码信息,生成对应的字典表,尝试批量自动登陆其它网站验证后,得到一系列可以登录的真实账户。
应对方案:
1、增强验证码机制,为防止验证码被破解,可以适当增加验证码生成的强度,例如中文图形验证码。
2、自动识别异常IP,对于异常IP,整理一个非常严格的恶意IP库,甚至禁止这些IP访问网站。
3、用户账户被撞开后的保护,对用户行为进行分析,如判断用户的登录IP是否在常用地区,如果不是则直接锁定账号,让用户通过收集、邮箱等手段来解锁。
用户名/口令爆破:
用户名/口令爆破(Brute-force attack),是一种常见的web安全漏洞,由于用户登录模块缺少必要的防护机制,使用网站的注册或登录接口,攻击者通过系统地组合所有可能性(例如登录时用到的账户名、密码等),并以穷举法尝试所有可能性破解用户的账户名、密码等敏感信息。
应对方案:
1、增强验证码机制,为防止验证码被破解,可以适当怎加验证码生成的强度,例如中文图形验证码。
2、用户名或密码输入错误均提示“用户名或密码错误”,防止黑客获取到注册用户的信息。
3、限制用户登录失败次数。
4、限制一定时间内IP登录失败次数。
注册模块设计缺陷:
注册模块设计缺陷(Registration module design flaws),是一种常见的web安全漏洞,网站注册模块的设计缺陷将导致一下几点安全漏洞:
1、任意用户密码找回。
2、暴力枚举网站已注册用户。
3、暴力破解用户密码。
4、万能密码登录。
5、SQL注入。
以上安全问题会带来用户密码被盗、个人信息泄露、网站数据库泄露、网站被入侵等风险。
应对方案:
1、如果使用邮件验证的方式找回密码,重置密码令牌需要设置为不可猜测,且加密令牌时使用通过加密的方式,而不是自己构造;设置重置密码会话过期时间,在重置密码时不要从请求中获取需要重置的用户名。
2、如果使用短信验证的方式找回密码,验证短信最少应为6位,且短信过期时间不能超过10分钟,在发送短信页面添加经过混淆过的图形验证码,并在后端设置单位时间内的短信发送频率。
3、限制单位时间内认证错误次数。
4、在用户注册页面、登录界面,添加可靠的机器人识别功能,例如图形验证码或短信验证码。
短信接口设计缺陷:
短信接口设计缺陷(SMS interface design flaws),是一种常见的web安全漏洞,短信接口通常用于注册验证、登录验证及其他敏感操作的验证上,但由于设计不当,通常会导致以下安全问题:
1、短时间内发送大量的手机短信。
2、短信验证码过短易被猜测。
3、短信验证码在发送多次时,多个验证码同时有效。
4、短信验证码在HTTP相应包中返回客户端。
应对方案:
1、在发送短信接口设置机器人识别机制,例如经过混淆的图形验证码,在验证通过后方可发送手机短信。
2、用来验证的验证码短信最少应为6位,过期时间内只能有一个验证码有效,且有效时间不应超过10分钟。
3、不要把短信验证码返回到客户端。
URL重定向漏洞:
URL重定向漏洞(URL redirection vulnerability),是一种常见的web安全漏洞,由于网站URL重定向功能设计不当,没有验证跳转的目标URL是否合法,用户可通过此漏洞转到任意网站,这会导致可通过该网站跳转到存在木马、病毒的网站或者钓鱼网站。
应对方案:
1、不应从用户请求或填写的内容中获取跳转的目标URL,应在后端设定跳转URL。
2、对需要跳转的目标URL进行验证,如果跳转的URL不是所允许的,则禁止跳转。
3、进行URL时提示用户并显示跳转的目标URL地址并询问是否跳转。
拒绝服务漏洞:
拒绝服务攻击(denial-of-service attack , DOS),亦称“洪水攻击”,是一种网络攻击手段,其目的在于使目标电脑的网络或系统资源耗尽,使服务暂时中断或停止,导致其正常用户无法访问。
拒绝服务的攻击也可能导致与目标计算机同一网络中的其它计算机被攻击。互联网和局域网之间的带宽会被攻击并导致大量消耗,不但影响目标计算机,同时也影响局域网中的其他计算机。如果攻击的规模较大,整个地区的网络连接都可能会受到影响。
应对方案:
拒绝服务攻击的防御方式通常为入侵检测,流量过滤和多重验证,意在堵塞网络带宽的流量将被过滤,而正常的流量可正常通过。
1、网络设备:防火墙可以设置规则,例如允许或拒绝特定通讯协议、端口或IP地址。当攻击从少数不正常的IP地址发出时,可以简单的使用拒绝规则阻止一切从攻击源IP发出的通信。
2、黑洞引导/流量清洗:黑洞引导指将所有受攻击计算机的通信全部发送至一个“黑洞”(空接口或不存在的计算机地址)或者有足够能力处理洪流的网络运营商,以避免网络受到较大影响。当流量被送到DDoS防护清洗中心时,通过采用抗DDoS软件处理,将正常流量和恶意流量区分开。这样一来可保障站点能够正常运作,处理真实用户访问网站带来的合法流量。
3、web服务器:升级web服务器,避免出现拒绝服务漏洞,如HTTP.sys(MS15-034)。
……………………