Skip to content
This repository has been archived by the owner on Jul 28, 2022. It is now read-only.

feilongDisplay sensitive

feilong edited this page Jun 19, 2019 · 6 revisions

用来敏感数据mask标签,简化开发

1.背景

  1. A1 - 注入
  2. A2 -失效的身份认证和会话管理
  3. A3 -跨站脚本(XSS)
  4. A4 - 不安全的直接对象引用
  5. A5 -安全配置错误
  6. A6 -敏感信息泄漏
  7. A7 - 功能级访问控制缺失
  8. A8 -跨站请求伪造(CSRF)
  9. A9 - 使用含有已知漏洞的组件
  10. A10 - 未验证的重定向和转发

许多Web应用程序没有正确保护敏感数据,如信用卡,税务ID和身份验证凭据。攻击者可能会窃取或篡改这些弱保护的数据以进行信用卡诈骗、身份窃取,或其他犯罪。敏感数据值需额外的保护,比如在存放或在传输过程中的加密,以及在与浏览器交换时进行特殊的预防措施。

业务影响:

考虑丢失数据和声誉影响造成的商业损失。如果这些数据被泄露,那你要承担的法律责任是什么?另外考虑到对企业造成的声誉影响。

防范措施:

  1. 保存到存储介质(database等)的时候,敏感数据需要加密处理,并且需要有严格的访问权限控制
  2. 不要轻易的在日志中输出敏感数据
  3. 浏览器交互数据的时候,需要特殊的处理(传到后端需要加密;现实在前端需要mask,也即使用当前类 {@link SensitiveTag})

当然,其他的敏感数据还有 SSL证书,密钥,服务器信息,软件版本,数据库类型

2.自定义标签参数说明:

参数 说明 是否必须required 默认 是否支持动态参数
value 待mask字符串 true true
maskChar mask的字符,比如*,#等 false   * true
type 类型,可以有 mobile,chineseName,address,email(忽视大小写) true true

示例:

3.jsp 顶端申明引用

<%@ taglib prefix="feilongDisplay" uri="http://java.feilong.com/tags-display"%>

4.代码编写

场景描述:

假设用户手机号码 是 15001231318, 通常在页面不可以直接显示此号码,需要进行mask操作

4.1 使用标签 :

<feilongDisplay:sensitive value="15001231318" type="mobile" />

此时页面渲染结果为:

150****1318

4.2 关于 type:

可用值(忽视大小写):

  • mobile
  • chineseName
  • address
  • email

4.3 逻辑原理

  1. 如果value是null 或者 empty,直接返回 value

  2. 优先读取 config/sensitive.properties 中的配置

  3. 如果type是 mobile

    1. 前三后四明文显示,其余mask显示
  4. 如果type是 chineseName

    1. 如果长度=1,直接显示
    2. 如果长度>1,第一个字符明文,其余均mask显示
  5. 如果type是 address

    1. 如果长度<=6,直接显示
    2. 如果长度>6,前6个字符明文,其余均mask显示
  6. 如果type是 email

    1. 如果找不到 @ 或者@前面没有字符,那么直接输出 value
    2. 如果@前面有2-4个字符,那么第1个字符显示,其余均mask显示
    3. 如果@前面有5-6个字符,那么第1个字符以及@前面一个字符显示,其余均mask显示
    4. 如果@前面有>6个字符,那么第1个字符,第2个字符,@前面1个字符,@前面2个字符显示,其余均mask显示

5.示例

6.前后端分离

现在有很多项目已经是前后端分离的了(不使用jsp),对于这种mask操作也必须在服务端处理并返回,不可以使用js加工处理

此时,你可以在服务器端直接调用

com.feilong.taglib.display.sensitive.SensitiveUtil.parse(String, SensitiveConfig)

方法

7.Q&A

7.1 我想要 手机号码 前 3 后 3 怎么做?

目前 com.feilong.taglib.display.sensitive.SensitiveType 中的 手机号码是 前 3 后 4 , 也就是说

13800001234 会被掩码 为 138*****1234

如果 你需要 前3 后3 , 你需要在 config/sensitive.properties 中配置

sensitive.mobile=3,3

优先级会高于 com.feilong.taglib.display.sensitive.SensitiveType.MOBILE

注意:此功能 since 1.14.0

sensitive config

--完