zoukankan      html  css  js  c++  java
  • 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 的区域设置。

  • 相关阅读:
    剑指offer--50.滑动窗口的最大值
    剑指offer--49.矩阵中的路径
    剑指offer--48.机器人的运动范围
    剑指offer--47.数据流中的中位数
    剑指offer--46.字符流中第一个不重复的字符
    剑指offer--45.二叉树的深度
    剑指offer--44.两个链表的第一个公共结点
    剑指offer--43.连续子数组的最大和
    海盗分宝石问题
    C++数组名退化指针实例
  • 原文地址:https://www.cnblogs.com/meInfo/p/9141889.html
Copyright © 2011-2022 走看看