检查用户名是否存在
使用布隆过滤器

用户注册
如何防止用户名重复?
通过布隆过滤器把所有用户名进行加载。这样该功能就能完全隔离数据库。
数据库层面添加唯一索引。
如何防止恶意请求毫秒级触发大量请求去一个未注册的用户名?
因为用户名没注册,所以布隆过滤器不存在,代表着可以触发注册流程插入数据库。但是如果恶意请求短时间海量请求,这些请求都会落到数据库,造成数据库访问压力。这里通过分布式锁,锁定用户名进行串行执行,防止恶意请求利用未注册用户名将请求打到数据库。
流程执行图:

如果恶意请求全部使用未注册用户名发起注册
系统无法进行完全风控,只有通过类似于限流的功能进行保障系统安全。
敏感数据加密
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| dataSources: ds_0: dataSourceClassName: com.zaxxer.hikari.HikariDataSource driverClassName: com.mysql.cj.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/link?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai username: root password: root
rules:
- !ENCRYPT tables: t_user: columns: phone: cipherColumn: phone encryptorName: common_encryptor mail: cipherColumn: mail encryptorName: common_encryptor queryWithCipherColumn: true encryptors: common_encryptor: type: AES props: aes-key-value: d6oadClrrb9A3GWo props: sql-show: true
|