Owasp Top10 Web安全宝典-常见漏洞及修复方案

SQL注入

漏洞定义

SQL注入是一种将SQL代码注入或者添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的SQL服务器加以解析并执行。由于SQL语句本身多样性,以及用于构造的SQL语句编码方法很多,因此凡是构造SQL语句没有过滤的均存在被潜在攻击的风险

攻击原理

其本质是对于输入的检查不充分,导致SQL语句将用户提交的非法数据当做语句的一部分来执行,简言而之就是用户提交的数据代入数据库的查询。

利用场景

  • 数据泄露,数据丢失,数据篡改;
  • 绕过认证、验证、绕过登录等功能;
  • 服务器进一步被入侵;
  • 数据、功能的损坏;

修复方案

  • 严格限定参数类型;

    只要是由固定格式类型的变量,在SQL语句执行前,应该严格按照固定格式检查(数据太大的情况下不适合)
  • 明确参数检验的边界,必须在服务端执行数据验证;
  • 采用参数化查询的方法(推荐)

    参数化查询强制开发者先定义所有的SQL语句,然后向每个查询传递参数。使用参数化查询可以使数据库区分代码和数据的区别,用户输入会被当做数据处理,而不是当成代码被执行。
  • 内置过滤系统(本质是黑名单,很常见但不推荐)经常采用addslashes函数,他会在指定的预定义字符前添加反斜杠转义,预定义字符;单引号(‘)双引号(“)反斜杠0 NULL;
  • 链接数据库的应用账号权限最小化原则。

XSS

漏洞定义

跨站脚本发生于在动态生成的web页面直接显示不可信(未严格验证)的外部输入,恶意用户可以利用该缺陷往动态页面中注入恶意script代码再浏览器页面执行。分类为存储型XSS(中危),反射型XSS(低危),DOM型XSS(低危)

攻击原理

  • 存储型XSS:

主要出现在让用户输入数据,供其他浏览此页的用户进行查看的地方,包括留言、评论、博客日志和各类表单等。应用程序从数据库中查询数据,在页面中显示出来,攻击者在相关页面输入恶意的脚本数据后,用户浏览此类页面就可以受到攻击。常见于一些GET、POST请求中,和一些保存型操作中。输入一进入数据库–取出数据库—输出,输入在A处进入数据库,而输出可能出现在其他任何用到数据的地方。

  • 反射型XSS:

主要是将脚本加入URL地址的程序参数里,参数进入程序后在页面直接输出脚本内容,用户点击此类的恶意链接很可能受到攻击。绝大部分是输入在哪里输出就在哪里。输入大部分位于地址栏或者来自DOM的某些属性,也会偶尔有数据在请求中(POST类型)。

  • DOM型XSS

它和反射型以及存储型XSS的区别在于,DOM XSS的代码并不需要服务器解析响应的直接参与,触发XSS靠的是浏览器的DOM解析,可以认为完全是客户端的事情。

利用场景

  • 获取cookie(对http-only没用)
  • 钓鱼攻击
  • 网站挂马
  • 控制用户的动作(发帖,私信)

修复方案

  • 输入过滤特殊字符
  • 输出编码处理
  • 设置http-only 属性
  • 全局XSS过滤器(推荐)

CSRF攻击

漏洞定义

跨站点请求伪造,在受害者毫不知情的情况下以受害者的名义伪造请求发送给受攻击的站点,从而在并未授权的情况下执行在权限保护之下的操作。

攻击原理

  • 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
  • 在用户信息通过验证后,网站A产生cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A
  • 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
  • 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
  • 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

利用场景

  • 以受害者的名义发送邮件,发消息等;
  • 添加管理员账号提权;
  • 购买商品,虚拟货币转账等;
  • 恶意删除系统数据;

修复方案

  • 验证HTTP Referer字段
    HTTP头中有一个字段叫Referer,它记录了该请求的来源地址。通常情况下,访问一个安全受限页面的请求来自于同一个网站。开发人员给所有安全敏感的请求统一增加拦截器来检查Referer的值,验证规则请求referer必须以http://host;port开头,
  • 在请求头中添加token并验证;
    在HTTP请求头中以参数的形式加入一个随机产生的token,并在服务器端建立一个拦截器来验证这个token。
  • 在HTTP头中自定义属性并验证;
    和第2中方式一样使用token验证,区别在于并不是以请求参数的形式添加到HTTP请求中,而是放置在http头中自定义的属性里。对于xmlhttprequest的请求,可以通过xmlhttprequest这个类,可以一次性给所有该类请求加上csrftoken这个http请求头属性,并把token值放入其中。

权限绕过/未授权访问

漏洞定义

越权,是超出了权限或权利范围访问系统。多数web应用都具备权限划分和控制,但是如果权限控制功能设计存在缺陷,那么攻击者就可以通过这些缺陷来访问未经授权的功能或数据,这就是我们通常说的越权漏洞。一般将越权分为以下几类:

  • 未授权访问:
    管理地址可以直接访问

    接口任意调用//RESTful API

    静态资源文件直接访问(比如直接下载压缩文件,后台生成的统计文件等)
  • 水平越权
    同级别的用户越权访问操作
  • 垂直越权
    普通用户越权执行特权用户的操作

利用场景

越权漏洞的危害与影响主要是与对应的业务的重要性有关,比如说某一页面服务器端响应(不局限于页面返回的信息,有时信息在响应包中,页面不一定能看见)中返回登录名、密码、手机号、身份证等敏感信息,如果存在平行越权,通过对用户ID遍历,就可以查看所有用户的敏感信息,这也是一种变相的脱裤,而且很难被防火墙发现,因为这和正常的访问请求没有什么区别,也不会包含特殊的字符,具有十足的隐蔽性。

修复方案

  • 基础安全架构,完善用户权限体系。要知道哪些数据对于哪些用户,哪些数据不应该由哪些用户操作。
  • 鉴权,服务端对请求的数据和当前用户身份做校验;
  • 不要直接使用对象的实名或关键字;
  • 对于可控参数进行严格的校验与过滤。

任意文件上传

漏洞定义

文件上传的功能处,若服务端脚本语言未对上传的文件进行严格的验证和过滤,导致恶意用户上传恶意的脚本文件时,就有可能获取执行服务器命令的能力,这就是文件上传漏洞。文件上传漏洞对web应用来说是一种非常严重的漏洞,一般情况下,web应用都会允许用户上传一些文件,如头像、附件等信息,如果web应用没有对用户上传的文件进行有效的检验过滤,那么恶意用户就会上传一句话木马等webshell,从而达到控制web网站的目的。

攻击原理

导致文件上传漏洞的原因比较多,主要包括以下几类:

  • 本地文件上传限制被绕过;
  • 过滤不严格或被绕过;
  • 文件路径截断;
  • 开源编辑器上传漏洞;
  • 中间件解析漏洞;
  • 服务器配置不当-HTTP启用不安全的方法(PUT方法)
  • 上传的文件目录,脚本文件可执行;
  • 对于web server,上传文件或指定目录的行为没有做限制;

利用场景

高危触发点

  • 相册、头像上传;
  • 视频,照片分享;
  • 附件上传(论坛发帖、邮箱)
  • 文件管理器

修复方案

  • 文件扩展名服务器端白名单校验
  • 判断文件类型(可结合MIME Type,后缀检查等方式)
  • 文件内容服务器端检验
  • 上传文件重命名
  • 隐藏上传文件路径
  • 文件上传目录设置为不可执行

任意文件下载/查看

漏洞定义

一些网站有提供文件查看或者下载功能,如果这些操作没对用户进行限制,用户就能查看或者下载任意的文件,可以是源代码文件,敏感文件等等。

攻击原理

  • 都有读文件的函数
  • 读文件的路径用户可控,且没有经过校验,或者校验的不够严格;
  • 输出文件的内容;

修复方案

  • 过滤.(点)、/(斜杠)
  • 正则判断用户输入的参数的格式,看输入的格式是否合法限定文件发个文范围,如php.ini中配置open_basedir

XXE

漏洞定义

XXE就是XML外部实体注入。当允许引用外部实体时,通过构造恶意的内容,就可以导致任意文件读取,系统命令执行,内网端口探测,攻击内网网站等危害。

攻击原理

通常攻击者会将payload注入到XML文件中,一旦文件被执行,将会被读取服务器上的本地文件,并对内网发起访问扫描内部网络端口。换而言之,XXE是一种从本地到达各种服务器的方法。此外,在一定程度上这也可能帮助攻击者绕过防火墙规则或者身份认证检查。

利用场景

远程代码执行,读取服务器文件

修复方案

  • 配置XML处理器去使用本地静态的DTD,不允许XML中含有任何自己生命的DTD。具体配置方法参考Fortify代码扫描修复指引中XML注入的修复方案

会话固定攻击

漏洞定义

会话固定(Session fixation)是一种诱骗受害者使用攻击者指定的会话标识(Session fixation)的攻击手段。这是攻击者读取会话标识最简单的方法。会话固定也可以看成是会话劫持的一种类型,原因是会话攻击的主要目的是获得目标用户的合法会话,不过会话固定还可以是强迫受害者使用攻击者设定的一个有效会话,以此来获得用户的敏感信息。

攻击原理

  • 攻击者通过某种手段重置目标用户的SessionID,然后监听用户会话状态;
  • 目标用户携带攻击者设定的SessionID登录站点;
  • 攻击者通过SessionID获得合法会话;

修复方案

  • 每当用户登录的时候就会重置SessionID;
  • SessionID闲置过久时,进行重置SessionID
  • 大部分防止会话劫持的方法对会话固定攻击同样有效。如设置httpOnly,关闭透明化SessionID,User-Agent验证,Token校验等。

敏感信息泄露

漏洞定义

可定位到用户,用户身份属性,认证信息,商业信息等的信息称为敏感信息,通过明文保存,界面未掩码,后端接口返回,直接放在URL中等方式造成数据泄露,称之为敏感信息泄露。

利用场景

  • 数据被盗取贩卖
  • 骚扰电话、垃圾邮件、短信;
  • 电话诈骗等;

修复方案

  • 使用HTTPS传输敏感信息;
  • 敏感信息使用POST请求提交;
  • 界面敏感信息掩码处理;
  • 敏感信息保存需要加密处理;

命令行注入攻击

漏洞定义

Web系统底层去调用系统操作命令,参数接收用户输入,并未过滤用户输入的数据,攻击者可以构造恶意命令或代码形成系统命令执行漏洞;

攻击原理

攻击者控制命令的组成部分,如参数或指令,通过特制的输入数据影响和控制应用执行相关的命令。

利用场景

系统提权;读取/操作系统敏感文件

修复方案

  • 采用白名单方式,对一切用户输入进行校验过滤

你可能感兴趣的:(----Web安全)