Web服务端漏洞类型

本文介绍常见的Web服务端安全漏洞。

SQL注入攻击

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

常见发生位置

  • URL参数提交,主要为GET请求参数。

  • 表单提交,主要是POST请求,也包括GET请求。

  • Cookie参数提交。

  • HTTP请求头部的一些可修改的值,例如Referer、Host等。

  • 一些边缘的输入点,例如MP3文件、图片文件的一些文件信息等。

防御措施

  • 使用预编译语句:一般情况下,防御SQL注入的最佳方式是使用预编译语句绑定变量。该方式对现有代码的改动量较大。

  • 使用存储过程:使用安全的存储过程可在一定程度上对抗SQL注入,但要注意采用此方法无法保证100%安全。

  • 严格检查用户数据:对用户传入的数据类型及内容进行严格的检查。

    • 检查数据类型:例如,利用ID查询时判断是否为整型,输入邮箱时判断邮箱格式,输入时间、日期等必须严格按照时间、日期格式等。

    • 检查数据内容:例如,严格检测用户提交数据中是否包含敏感字符或字符串,是否匹配某种注入规则,严格转义特殊字符等。

    此方法虽然便于实施,但容易产生误报和漏报,且容易被绕过。

  • 其他:使用安全的编码函数、统一各数据层编码格式(例如统一使用UTF-8格式等)、严格限制数据库用户权限、定期进行代码黑盒白盒扫描、避免将错误信息显示到页面等。

文件上传

文件上传漏洞是指由于程序代码未对用户提交的文件进行严格的分析和检查,导致攻击者可以上传可执行的代码文件,从而获取Web应用的控制权限(GetShell)。

常见发生位置

  • 所有使用到上传功能的位置。

  • 用户可自定义的头像、背景图片等。

  • 富文本编辑器中的文件上传功能。

防御措施

  • 将上传目录权限设置为不可执行。

  • 严格判断文件类型,使用白名单而不是黑名单(注意大小写问题)。需要注意与Web Server相关的漏洞所造成的问题,例如Apache、IIS、Nginx 等Web服务器的文件解析漏洞。

  • 使用随机数改写上传后的文件名和文件路径。

  • 单独设置文件服务器及域名。

权限漏洞

访问控制是指用户对系统所有访问的权限控制,通常包括水平权限和垂直权限。访问控制问题是所有业务系统都可能产生的逻辑类漏洞,很难通过日常的安全工具扫描或防护,通常会造成大量用户数据泄露事件。

  • 水平越权:同一权限(角色)级别的用户之间所产生的问题,例如A用户可以未授权访问B用户的数据等。

  • 垂直越权:不同权限(角色)级别的用户之间所产生的问题,例如普通用户可未授权进行管理操作,未登录用户可以访问需授权应用等。

常见发生位置

  • 所有涉及到与用户相关数据的位置,例如用户资料、地址、订单等。

  • 所有涉及到登录及权限控制的位置,例如后台登录、当前用户权限校验等。

防御措施

  • 对于所有涉及到用户数据的操作,严格判断当前用户的身份。

  • 对于所有需要权限控制的位置,严格校验用户权限级别。

暴力破解

暴力破解是指攻击者通过遍历或字典的方式,向目标发起大量请求,通过判断返回数据包的特征来找出正确的验证信息,从而绕过验证机制。随着互联网众多网站的数据库被泄露,攻击者选择的样本可以更具针对性,暴力破解的成功率也在不断上升。

常见发生位置

  • 用户登录处的账号密码暴力破解。

  • 人机验证机制容易绕过,例如使用较易识别的验证码。

  • 找回密码或二次身份验证等可能用到的手机短信验证码。

防御措施

  • 强制使用强密码,并定期修改。

  • 限制密码错误尝试次数。

  • 使用强人机验证机制。

  • 限制一定时间内的高频访问次数。

拒绝服务攻击

拒绝服务攻击(DoS,Denial of Service)是利用合理的请求造成资源过载,从而导致服务不可用的一种攻击方式。分为针对Web应用层的攻击及针对客户端或App的攻击。

常见发生位置

  • Web层拒绝服务攻击常见于会大量消耗资源的位置,例如查找功能等。

  • 客户端或App拒绝服务攻击常见于异常输入数据造成的程序崩溃。

防御措施

  • 针对Web层拒绝服务攻击:

    • 限制每个客户端的请求频率。

    • 使用验证码过滤自动攻击者。

    • 优化应用代码的性能、网络架构等。

  • 针对客户端或App拒绝服务攻击:

    • 删除不必要的组件。

    • 对用户输入数据进行过滤和检查。

敏感信息泄露

敏感信息泄露是指包括用户信息、企业员工信息、内部资料等不应当被外部访问到的数据通过网站、接口、外部存储等途径被未授权泄露到外部的漏洞。信息泄露漏洞会导致大量用户或企业信息被恶意利用,进行诈骗、账户窃取等,给用户和企业带来严重的不良影响。并且信息一旦被泄露,影响会很难消除。

常见发生位置

  • 获取用户、企业信息等数据的网站或客户端接口。

  • 企业可访问到的外部存储,例如网盘、邮箱等。

  • 其他一切可能泄露数据的途径。

防御措施

对数据接口进行严格的权限检查和访问限制。划分企业安全边界,限制内部数据外流,例如禁止访问外部存储应用等,提高员工数据安全意识。

业务逻辑漏洞

业务逻辑漏洞是指由于业务在设计时考虑不全所产生的流程或逻辑上的漏洞。例如:

  • 用户找回密码缺陷,攻击者可重置任意用户密码。

  • 短信炸弹漏洞,攻击者可无限制利用接口发送短信,恶意消耗企业短信资费,骚扰用户等。

由于业务逻辑漏洞跟业务问题贴合紧密,常规的安全设备无法有效检测出,还需要人工根据业务场景及特点进行分析检测。

常见发生位置

所有涉及到用户交互的位置。

防御措施

针对业务场景进行全面的检测。

安全配置缺陷

安全配置缺陷包括文件遍历、源码泄露、配置文件泄露等。

  • 文件遍历:可以浏览服务器Web目录下的文件列表,可能会泄露重要文件。

  • 源码泄露:可以查到的Web程序的源代码。

  • 配置文件泄露:Web服务器及程序代码的配置文件泄露等。

防御措施

检查所有可能存在安全配置问题的点,在满足业务需求的情况下,最大化安全配置。