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

1、Portability 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() 时将返回 "T\u0130TLE",其中 "\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 的区域设置。

Fortify漏洞之Portability Flaw: Locale Dependent Comparison的更多相关文章

  1. Portability Flaw Locale Dependent Comparison

    Portability Flaw Locale Dependent Comparison [问题描述] 该问题涉及String的toUpperCase()方法.具体通过例子演示相关现象. public ...

  2. Fortify漏洞之Portability Flaw: File Separator 和 Poor Error Handling: Return Inside Finally

    继续对Fortify的漏洞进行总结,本篇主要针对 Portability Flaw: File Separator 和  Poor Error Handling: Return Inside Fina ...

  3. Fortify漏洞之Cross-Site Scripting(XSS 跨站脚本攻击)

    书接上文,继续对Fortify漏洞进行总结,本篇主要针对XSS跨站脚步攻击漏洞进行总结,如下: 1.Cross-Site Scripting(XSS 跨站脚本攻击) 1.1.产生原因: 1. 数据通过 ...

  4. Fortify漏洞之Insecure Randomness(不安全随机数)

    继续对Fortify的漏洞进行总结,本篇主要针对  Insecure Randomness  漏洞进行总结,如下: 1.Insecure Randomness(不安全随机数) 1.1.产生原因: 成弱 ...

  5. Fortify漏洞之Denial of Service: Regular Expression

    继续对Fortify的漏洞进行总结,本篇主要针对  Denial of Service: Regular Expression  漏洞进行总结,如下: 1.Denial of Service: Reg ...

  6. Fortify漏洞之 Log Forging(日志伪造)

    继续对Fortify的漏洞进行总结,本篇主要针对 Log Forging(日志伪造)的漏洞进行总结,如下: 1.1.产生原因: 在以下情况下会发生 Log Forging 的漏洞: 1. 数据从一个不 ...

  7. Fortify漏洞之 Privacy Violation(隐私泄露)和 Null Dereference(空指针异常)

    继续对Fortify的漏洞进行总结,本篇主要针对 Privacy Violation(隐私泄露) 和 Null Dereference(空指针异常) 的漏洞进行总结,如下: 1.1.产生原因: Pri ...

  8. Fortify漏洞之Dynamic Code Evaluation: Code Injection(动态脚本注入)和 Password Management: Hardcoded Password(密码硬编码)

    继续对Fortify的漏洞进行总结,本篇主要针对  Dynamic Code Evaluation: Code Injection(动态脚本注入) 和 Password Management: Har ...

  9. Fortify漏洞之Open Redirect(开放式重定向)

    继续对Fortify的漏洞进行总结,本篇主要针对  Open Redirect(开放式重定向)  的漏洞进行总结,如下: 1.1.产生原因: 通过重定向,Web 应用程序能够引导用户访问同一应用程序内 ...

随机推荐

  1. 导入eclipse有Unbound classpath variable: 'M2_REPO报错的解决方法

    Eclipse maven of the project reported in Unbound classpath variable: 'M2_REPO /**/***/***. jar' But ...

  2. Python多进程和多线程是鸡肋嘛?【转】

    GIL是什么 Python的代码执行由 Python虚拟机(也叫解释器主循环,CPython版本)来控制,Python在设计之初就考虑到在解释器的主循环中,同时只有一个线程在运行.即每个CPU在任意时 ...

  3. flask 开发接口测试平台

    flask 开发接口测试平台 数据库,forms  views  视图, 数据库如下: # encoding: utf-8 ''' @author: lileilei @file: models.py ...

  4. 转载:Base64编解码介绍

    https://www.liaoxuefeng.com/wiki/897692888725344/949441536192576 Base64是一种用64个字符来表示任意二进制数据的方法. 用记事本打 ...

  5. tensorflow运行时openssl与boringssl兼容性问题

    tensorflow中,grpc使用boringssl进行加密,boringssl是google基于openssl自行开发的一条分支,有许多相同函数,但底层实现以及支持的加密类型有不同. 且tenso ...

  6. 【转载】 LSTM构建步骤以及static_rnn与dynamic_rnn之间的区别

    原文地址: https://blog.csdn.net/qq_23981335/article/details/89097757 --------------------- 作者:周卫林 来源:CSD ...

  7. EasyDSS高性能RTMP/FLV/HLS(m3u8)/RTSP流媒体服务器技术的HTTP QueryString URL的C++实现方案

    EasyDSS支持HTTP GET接口访问,我们需要获取url的各种参数信息 比如 http://ip:port/action?a=1&b=2&c=3 我们需要知道对应的a.b.c的值 ...

  8. ELK 部署文档

    1. 前言 在日常运维工作中,对于系统和业务日志的处理尤为重要.尤其是分布式架构,每个服务都会有很多节点,如果要手工一个一个的去取日志,运维怕是要累死. 简单介绍: ELK 是 elasticsear ...

  9. [LeetCode] 359. Logger Rate Limiter 记录速率限制器

    Design a logger system that receive stream of messages along with its timestamps, each message shoul ...

  10. java面试 (八)- 关于减少if else

    if else一般不建议嵌套超过三层,如果一段代码存在过多的if else嵌套,就会严重降低可读性.那么如何降低if else的嵌套数呢? 1:把接口分为外部和内部接口,所有空值判断放在外部接口完成: ...