-
Notifications
You must be signed in to change notification settings - Fork 30
feilongDisplay sensitive
用来敏感数据mask标签,简化开发
- A1 - 注入
- A2 -失效的身份认证和会话管理
- A3 -跨站脚本(XSS)
- A4 - 不安全的直接对象引用
- A5 -安全配置错误
- A6 -敏感信息泄漏
- A7 - 功能级访问控制缺失
- A8 -跨站请求伪造(CSRF)
- A9 - 使用含有已知漏洞的组件
- A10 - 未验证的重定向和转发
许多Web应用程序没有正确保护敏感数据,如信用卡,税务ID和身份验证凭据。攻击者可能会窃取或篡改这些弱保护的数据以进行信用卡诈骗、身份窃取,或其他犯罪。敏感数据值需额外的保护,比如在存放或在传输过程中的加密,以及在与浏览器交换时进行特殊的预防措施。
考虑丢失数据和声誉影响造成的商业损失。如果这些数据被泄露,那你要承担的法律责任是什么?另外考虑到对企业造成的声誉影响。
- 保存到存储介质(database等)的时候,敏感数据需要加密处理,并且需要有严格的访问权限控制
- 不要轻易的在日志中输出敏感数据
- 浏览器交互数据的时候,需要特殊的处理(传到后端需要加密;现实在前端需要mask,也即使用当前类 {@link SensitiveTag})
当然,其他的敏感数据还有 SSL证书,密钥,服务器信息,软件版本,数据库类型等
参数 | 说明 | 是否必须required | 默认 | 是否支持动态参数 |
---|---|---|---|---|
value | 待mask字符串 | true | 无 | true |
maskChar | mask的字符,比如*,#等 | false | * | true |
type | 类型,可以有 mobile,chineseName,address,email(忽视大小写) | true | 无 | true |
示例:
<%@ taglib prefix="feilongDisplay" uri="http://java.feilong.com/tags-display"%>
场景描述:
假设用户手机号码 是 15001231318
, 通常在页面不可以直接显示此号码,需要进行mask操作
<feilongDisplay:sensitive value="15001231318" type="mobile" />
此时页面渲染结果为:
150****1318
可用值(忽视大小写
):
- mobile
- chineseName
- address
-
如果value是null 或者 empty,直接返回 value
-
优先读取
config/sensitive.properties
中的配置 -
如果type是
mobile
- 前三后四明文显示,其余mask显示
-
如果type是
chineseName
- 如果长度
=
1,直接显示 - 如果长度
>
1,第一个字符明文,其余均mask显示
- 如果长度
-
如果type是
address
- 如果长度
<=
6,直接显示 - 如果长度
>
6,前6个字符明文,其余均mask显示
- 如果长度
-
如果type是
email
- 如果找不到
@
或者@
前面没有字符,那么直接输出 value - 如果
@
前面有2-4
个字符,那么第1个字符显示,其余均mask显示 - 如果
@
前面有5-6
个字符,那么第1个字符以及@
前面一个字符显示,其余均mask显示 - 如果
@
前面有>6
个字符,那么第1个字符,第2个字符,@
前面1个字符,@
前面2个字符显示,其余均mask显示
- 如果找不到
现在有很多项目已经是前后端分离的了(不使用jsp),对于这种mask操作也必须在服务端处理并返回,不可以使用js加工处理
此时,你可以在服务器端直接调用
com.feilong.taglib.display.sensitive.SensitiveUtil.parse(String, SensitiveConfig)
方法
目前 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
--完
core