关于sql关键字及敏感数据脱敏

数据脱敏

数据脱敏是经常会遇到的需求,很常见。
尤其是一些客户数据,如身份证号、手机号码等。
脱敏规则也不尽相同,这里列举两种,作为参考吧。

数字类型数据脱敏

近期刚好处理了一个甲方提出的需求,接口中返回数据,需要判断包含的数字连续位数,如果超过六位,则进行脱敏。脱敏规则是保留最后六位,其余数字用星号“*”代替。
话不多说,用代码说明:

String content = "abc1234567def890";
Pattern pattern = Pattern.compile("\\d{6,}");
Matcher matcher = pattern.matcher(content);
while (matcher.find()) {
   
    System.out.println(matcher.group());
}

此处,字符串 content 代表接口返回的参数,其中包含了超过六位数的连续数字。
这段代码中,正则表达式中的\d表示匹配数字,{6,}表示匹配6个或更多个数字。在Matcher对象的find()方法中,每次匹配到符合条件的子串时,可以通过group()方法获取该子串。

获取子串后,根据脱敏规则,进行脱敏:

public static String keepLastFourDigits(String str) {
   
    int len = str.length();
    if (len <= 6) {
   
        return str;
    } else {
   
        String lastFourDigits = str.substring(len - 6);
        String start = "";
        for (int i = 0; i < len - 6; i++) {
   
            start += "*";
        }
        return start + lastFourDigits;
    }
}

执行结果:

String str1 = "1234567890";
String str2 = "123456";
String str3 = "12";
System.out.println(keepLastFourDigits(str1)); // 输出:****567890
System.out.println(keepLastFourDigits(str2)); // 输出:123456
System.out.println(keepLastFourDigits(str3)); // 输出:12

可以看到,脱敏数据符合规则。
最终应用到需求中,只需要再用脱敏后的子串替换掉脱敏前的子串即可。

sql关键字脱敏

其实是属于防 sql 注入的一种方式,当进行数据保存时,对数据进行校验,若内容中包括 sql 关键字,如select、update、delete、union等,有可能在某些条件下对系统的正常运行造成影响。
根据需求,需要将保存信息中的指定关键字脱敏,规则是保留首字母,后面用星号代替。实际应用中,除sql关键字外,也包含了一些js关键字,如alert等。
代码说明:

public class CheckSensitiveWordsUtil(){
   

	private final static sensitiveWords = "select,update,alert";
	
	public static String replaceSensitiveWords(String input) {
   
	    String output = input;
	    String[] wordsArr = sensitiveWords.split(",");
	    for(String s : wordsArr){
   
			output = output.replaceAll("(?i)"+s, s.substring(0,1)+"*");
		}
	    return output;
	}
}

这里使用了正则表达式来匹配字符串中的“select”、“alert”等,并且使用了“(?i)”来忽略大小写。然后使用replaceAll方法将匹配到的字符串替换成首字母加上“*”的形式。
测试代码:

String input = "This is a select statement and an update statement.";
String output = replaceSensitiveWords(input);
System.out.println(output);

执行结果:

This is a s* statement and an u* statement.

相关推荐

  1. 关于sql关键字敏感数据脱敏

    2024-02-03 14:24:02       34 阅读
  2. 数据脱敏数据库安全风险

    2024-02-03 14:24:02       12 阅读
  3. 快速了解数据脱敏

    2024-02-03 14:24:02       9 阅读
  4. 关于SQL注入问题解决--小记

    2024-02-03 14:24:02       32 阅读
  5. Spring 数据脱敏实现方式

    2024-02-03 14:24:02       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-03 14:24:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-03 14:24:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-03 14:24:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-03 14:24:02       20 阅读

热门阅读

  1. 蓝桥杯客观题练习笔记

    2024-02-03 14:24:02       35 阅读
  2. C++设计模式之工厂模式

    2024-02-03 14:24:02       30 阅读
  3. Linux:使用grep和more索日志内容排查Bug

    2024-02-03 14:24:02       32 阅读
  4. C++之结构体

    2024-02-03 14:24:02       26 阅读
  5. kingbase配置SSL双向认证

    2024-02-03 14:24:02       30 阅读
  6. GMSSL之ZUC256算法

    2024-02-03 14:24:02       35 阅读