• Fortify漏洞之Portability Flaw: Locale Dependent Comparison


      继续对Fortify的漏洞进行总结,本篇主要针对 Portability Flaw: Locale Dependent Comparison 漏洞进行总结,如下:

    1Portability Flaw: Locale Dependent Comparison

    1.1、产生原因:

      对可能与区域设置相关的数据进行比较时,应指定相应的区域设置

     

    示例 1以下示例尝试执行验证,以确定用户输入是否包含 <script> 标签。

    ...
    public String tagProcessor(String tag){
      if (tag.toUpperCase().equals("SCRIPT")){
         return null;
      }
      //does not contain SCRIPT tag, keep processing input
      ...
    }
    ...

     

    关于上述代码的问题是:在使用不带区域设置的java.lang.String.toUpperCase() 时,其将使用默认的区域设置规则。使用土耳其区域设置"title".toUpperCase() 时将返回 "Tu0130TLE",其中 "u0130" "LATIN CAPITAL LETTER I WITH DOT ABOVE" 字符。这会导致生成意外结果,例如,在示例 1 中,会导致此验证无法捕获 "script" 一词,从而可能造成跨站脚本攻击漏洞。

     

    1.2、修复方案:

    为了防止出现此问题,请始终确保指定默认区域设置,或者指定可以接受这些字符(如toUpperCase())并带有 API 的区域设置。

     

    示例 2:以下示例通过手动方式将区域设置指定为 toUpperCase() 的参数。

    import java.util.Locale;
    ...
    public String tagProcessor(String tag){
      if (tag.toUpperCase(Locale.ENGLISH).equals("SCRIPT")){
          return null;
      }
      //does not contain SCRIPT tag, keep processing input
      ...
    }
    ...

     

    示例 3以下示例使用了函数java.lang.String.equalsIgnoreCase() API 以防止出现此问题。
    ...
    public String tagProcessor(String tag){
      if (tag.equalsIgnoreCase("SCRIPT")){
         return null;
      }
      //does not contain SCRIPT tag, keep processing input
      ...
    }
    ...

     

    因为 equalsIgnoreCase() 会更改与Character.toLowerCase() Character.toUpperCase() 类似的内容,所以可以防止此问题。这涉及到使用来自UnicodeData 文件(由 Unicode 联盟维护的 Unicode 字符数据库的一部分)的信息创建这两种字符串的临时标准格式。即使这可能会导致这些字符在被读取时以不可读的方式呈现出来,但却能够在独立于区域设置的情况下进行比较。

    1.3、预防该漏洞的开发规范:

      1、请始终确保指定默认区域设置,或者指定可以接受这些字符(如toUpperCase())并带有 API 的区域设置。

  • 相关阅读:
    1006. 求和游戏
    1004. 西西弗斯式的命运
    1024. 排序
    1005. 数独
    kafka的基本操作
    kafka安装
    spring boot 使用redis 及redis工具类
    ArrayDeque类的使用详解
    设计模式随笔之——工厂方法模式
    转:Android随笔之——使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
  • 原文地址:https://www.cnblogs.com/meInfo/p/9141889.html
Copyright © 2020-2023  润新知