我正在參加「掘金·啟航計劃」
數(shù)據(jù)脫敏指指對某些敏感信息通過脫敏規(guī)則進行數(shù)據(jù)的變形差油,實現(xiàn)敏感隱私數(shù)據(jù)的可靠保護。如我們?nèi)粘任洞?梢钥吹降氖謾C號“156****8888”等蓄喇,專注安全問題,解決脫敏需求交掏,避免大家重復(fù)造輪子妆偏,secure-ext-spring-boot-starter控件已提供返回值脫敏的策略及使用方法。但是在實際開發(fā)中我們總是習慣性忽略“日志”這一個重要內(nèi)容盅弛,雖然有爆出“Github密碼重置功能出現(xiàn)漏洞 日志中以明文形式記錄了用戶密碼”的問題钱骂,但是由于日志脫敏對于一個公司(特別是小公司)來說叔锐,投入產(chǎn)出比顯得有點低。因此secure-ext-spring-boot-starter控件旨在降低開發(fā)成本见秽,提供易集成愉烙、低侵入(基本無侵入)的工具給大家使用箱叁。
最新版本
最新發(fā)布版已更新到mave中央倉庫:[Maven Central][2.0.0-release]
1 引入依賴
<dependency>
<groupId>io.gitee.chemors</groupId>
<artifactId>secure-ext-spring-boot-starter</artifactId>
<version>Lastest Version</version>
</dependency>
2 開啟脫敏注解
sensitive:
log-info:
enable: true # 開啟日志脫敏
categories: # 分類參數(shù)--可以自己自由添加
- keywords: name,chineseName # 分類關(guān)鍵詞
pre-length: 1 # 字符串前半部分留幾位明文
suf-length: 1 # 字符串后半部分留幾位明文
- keywords: mail,email # 分類關(guān)鍵詞
pre-length: 3 # 字符串前半部分留幾位明文
suf-length: 3 # 字符串后半部分留幾位明文
3 修改logback.xml
很簡單笼才,在logback.xml最前面添加一行(重寫原%msg規(guī)則的實現(xiàn))
<conversionRule conversionWord="msg" converterClass="io.gitee.chemors.secure.ext.log.core.LogBackCoreConverter"/>
4 語法示例
4.1 基于json對象的脫敏
無侵入,繼續(xù)使用logback語法即可叠纷,已有代碼無需改造
JSONObject jsonObject = new JSONObject();
jsonObject.putOpt("name",name);
jsonObject.putOpt("mobile",mobile);
log.info("基于json的脫敏---》jsonObject is jsonObject {} ",jsonObject);
4.2 基于簡單對象的脫敏
無侵入肮蛹,繼續(xù)使用logback語法即可勺择,已有代碼無需改造创南。
注意:考慮到性能以及實用性的問題伦忠,復(fù)雜的嵌套對象暫未解析,即只解析對象的第一層屬性稿辙。(示例中的address不會被解析)
SensitiveEntity sensitiveEntity = new SensitiveEntity();
sensitiveEntity.setName(name);
sensitiveEntity.setMobile(mobile);
SensitiveSubEntity sensitiveSubEntity = new SensitiveSubEntity();
sensitiveSubEntity.setAddress("中國 河南 鄭州");
sensitiveEntity.setSubEntities(Arrays.asList(sensitiveSubEntity));
SensitiveEntity sensitiveEntity2 = new SensitiveEntity();
sensitiveEntity2.setName(name + "222");
sensitiveEntity2.setMobile(mobile + "333");
log.info("基于實體類的脫敏---》sensitiveEntity1 is {} and sensitiveEntity2 is {}",sensitiveEntity,sensitiveEntity2);
4.3 基于字符串的脫敏(語法有調(diào)整)
由于脫敏是基于key-value模式昆码,因此需要指定key,才可以解析出脫敏規(guī)則邻储,因此語法需稍微調(diào)整為:空格+key^{}+空格 ;
log.info("基于字符串的脫敏---》name is name^{} , and mobile is mobile^{}",name, mobile);
5 脫敏結(jié)果
6開源項目
歡迎大家star赋咽,您的star就是我堅持開源的動力。另外吨娜,有問題歡迎提issue脓匿。