Web服务端漏洞类型

SQL注入攻击

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

常见发生位置

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

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

  • Cookie参数提交。

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

  • 一些边缘的输入点,比如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服务器及程序代码的配置文件泄露等。

防御措施

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

Web客户端漏洞类型

跨站脚本攻击(XSS)

跨站脚本攻击(Cross Site Script,简称XSS)通常指黑客通过HTML注入方式篡改了网页并插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击行为。XSS漏洞可被用于用户身份窃取(特别是管理员)、行为劫持、挂马、蠕虫、钓鱼等。跨站脚本攻击是目前Web客户端安全中最严重的漏洞。

跨站脚本攻击根据效果的不同可以分为以下三种。

  • 反射型XSS攻击:页面仅把用户输入直接回显在页面或源码中,诱导用户点击访问包含恶意代码的URL。

  • 存储型XSS攻击:XSS攻击代码存储在服务器中。由于用户可能会主动浏览被攻击页面,此种方法危害较大。

  • DOM型XSS攻击:通过修改页面的DOM节点形成XSS。

常见发生位置:

  • 所有涉及到用户可控的输入输出点,如个人信息、文章、留言等。

防御措施:

  • 对重要的Cookie字段使用HTTPOnly参数。

  • 检查所有用户可控输入。对所有的输入点进行严格的检查,过滤或拦截所有不符合当前语境的输入。由于一般无法预期所有可能的输出点语境,此种方法效果较差。

  • 检查所有用户输入的输出点。由于XSS攻击最终是发生在输出点,因此需要分析出用户输入数据的所有输出点的环境,是输入在HTML标签中,还是HTML属性、Script标签、事件、CSS 位置中。针对不同的输出位置,制定不同的转义或过滤规则。

  • 处理富文本。在文章、论坛等需要用到富文本的地方,需要特别注意富文本与XSS的区分,严格禁止所有的危险标签及事件,原则上应当使用白名单过滤标签、事件及属性。

跨站点请求伪造(CSRF)

跨站点请求伪造(Cross Site Request Forgery,简称CSRF)。由于重要操作的所有参数都是可以被攻击者猜到,攻击者即可伪造请求,利用用户身份完成攻击操作,如发布文章、购买商品、转账、修改资料甚至密码等。

常见发生位置:

  • 所有由用户(包括管理员)发起的操作点。

防御措施:

  • 辅助验证方法:使用验证码。验证码是对抗CSRF攻击最简单有效的方法,但会影响用户的使用体验,并且不是所有的操作都可以添加验证码防护。因此,验证码只能作为辅助验证方法。

  • 通用防护方法:添加足够随机的csrf_token并每次更新,以防止参数被猜解。使用CSRF_token是目前通用的防护方法。

  • 其他防御措施:验证HTTP Referer,拒绝不安全的来源。但服务器并非在任何情况下都能获取到Referer值。