为了支撑高并发,我把身份证存到了JS里

本文探讨了开发人员如何处理用户隐私,强调了个人信息安全规范的重要性,特别是用户敏感信息的加密存储。文章介绍了《个人信息安全规范》中的原则,并提供了框架技术实现,如使用Interceptor和BaseTypeHandler自动加解密敏感信息,以及日志文件的敏感信息过滤。此外,还讨论了密码加密,推荐使用BCrypt,并提及Dropbox的密码存储方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


接着上一篇 《千亿级互联网平台背后那些事-欲上青天揽明月》,今天我们来聊一聊关于用户隐私信息的事。

随着时代及互联网的发展,人们对个人隐私越来越重视,但隐私信息泄露及滥用的问题依然屡见不鲜。之前有一份《中国个人信息安全和隐私保护报告》曾抽取100万份调查数据,80%用户遭遇隐私泄露,还比如万豪在18年遭遇3.83亿隐私数据泄露后于2020年3月31日再次爆出520万客户信息泄露。这背后的缘由咱们就不做多讲,除了一些流氓公司的恶意行为,肯定还有很多的商业利益的驱使。今天我们来聊一聊开发人员该如何处理用户隐私,想起半年前在知乎上爆出的某省普通话水平测试查询系统开发人员把身份证直接写在了js里,有网友笑称这才是真正的前后端分离,支撑亿级并发完全不是事
文章开始之前,先抛出一个小问题:除了姓名、身份证、银行卡、手机号外,你觉得还有哪些是用户的敏感信息,需要加密存储?在这里插入图片描述

什么叫个人信息,哪些又算敏感信息?个人信息该如何存储,又该如何展示?游戏中的兑换码是不是敏感信息?住宿信息是不是敏感信息??作为一名优秀的开发人员,我们不能把目光仅仅聚焦在代码上,不能永远是产品经理或者项目经理让我这么做,还应该掌握所在行业的业务知识,包括法律及政策规范等,提升拓宽我们的业务知识面。

一、用户信息安全规范

关于信息系统建设这一块,国家及行业其实有很多的标准和规范的,比如国家标准全文公开系统(http://openstd.samr.gov.cn/))。关于个人信息,最新的是今年发布的《GB/T 35273-2020 信息安全技术-个人信息安全规范 》,将于2020-10-01正式实施,取代老的标准GB/T 35273-2017。 整个规范文档主要体现了七大原则:权责一致原则、目的明确原则、选择同意原则、最少够用原则、公开透明原则、确保安全原则、主体参与原则
在这里插入图片描述

1.1 ​用户信息、敏感信息定义及判断依据

1.1.1 个人信息

个人信息,personal information。指以电子或者其他方式记录的能够单独或者与其他信息结合识别特定自然人身份或者反映特定自然人活动情况的各种信息。

判定方式

  1. 识别:即从信息到个人,由信息本身的特殊性识别出特定自然人,个人信息应有助于识别出特定个人。
  2. 关联:即从个人到信息,如已知特定自然人,由该特定自然人在其活动中产生的信息(如个人位置信息、个人通话记录、个人浏览记录等)即为个人信息。
    符合上述两种情形之一的信息,均应判定为个人信息。

个人信息举例个人信息举例
:个人信息控制者通过个人信息或其他信息加工处理后形成的信息,例如,用户画像或特征标签,能够单独或者与其他信息结合识别特定自然人身份或者反映特定自然人活动情况的,也属于个人信息。

1.1.2 个人敏感信息

个人敏感信息,personal sensitive information。指一旦泄露、非法提供或滥用可能危害人身和财产安全,极易导致个人名誉、身心健康受到损害或歧视性待遇等的个人信息。通常情况下,14岁以下(含)儿童的个人信息和涉及自然人隐私的信息属于个人敏感信息

判定方式

  1. 泄露:个人信息一旦泄露,将导致个人信息主体及收集、使用个人信息的组织和机构丧失对个人信息的控制能力,造成个人信息扩散范围和用途的不可控。某些个人信息在泄漏后,被以违背个人信息主体意愿的方式直接使用或与其他信息进行关联分析,可能对个人信息主体权益带来重大风险,应判定为个人敏感信息。例如,个人信息主体的身份证复印件被他人用于手机号卡实名登记、银行账户开户办卡等。

  2. 非法提供:某些个人信息仅因在个人信息主体授权同意范围外扩散,即可对个人信息主体权益带来重大风险,应判定为个人敏感信息。例如,性取向、存款信息、传染病史等。

  3. 滥用:某些个人信息在被超出授权合理界限时使用(如变更处理目的、扩大处理范围等),可能对个人信息主体权益带来重大风险,应判定为个人敏感信息。例如,在未取得个人信息主体授权时,将健康信息用于保险公司营销和确定个体保费高低。

个人敏感信息举例
个人敏感信息举例
:个人信息控制者通过个人信息或其他信息加工处理后形成的信息,如一旦泄露、非法提供或滥GB/T 35273—20206用可能危害人身和财产安全,极易导致个人名誉、身心健康受到损害或歧视性待遇等的,属于个人敏感信息。

1.2 ​用户信息存储的注意事项

  1. 个人信息存储时间最小化,超过个人信息存储期限后,应对个人信息进行删除或匿名化处理。
  2. 传输和存储个人敏感信息时,应采用加密等安全措施;采用密码技术时宜遵循密码管理相关国家标准。
  3. 个人生物识别信息应与个人身份信息分开存储
  4. 原则上不应存储原始个人生物识别信息(如样本、图像等),可采取的措施包括但不限于:仅存储个人生物识别信息的摘要信息;在采集终端中直接使用个人生物识别信息实现身份识别、认证等功能; 在使用面部识别特征、指纹、掌纹、虹膜等实现识别身份、认证等功能后删除可提取个人生物识别信息的原始图像。

整个规范文件中,还提到了用户信息的使用、展示、第三方接入、安全管理等等,有兴趣的小伙伴可以自定搜索了解一下。

二、​框架技术实现

2.1 用户敏感信息自动加解密

正如第一章节提到的,用户的真实姓名、手机号、银行卡号、包括住宿等敏感信息需要加密存储到数据库中,业务正常使用的时候再转化为明文数据。从技术实现角度来看,无非就是新增、编辑时进行加密,查询时解密,这样一个个操作起来还是比较low的,而且很可能哪天新增了一个方法又忘记加解密了。所以大部分会通过框架来实现,实现的原理无外乎反射机器+拦截器。接下来以Mybatis为例,原理如下图,具体可参考:https://blog.youkuaiyun.com/weixin_39494923/article/details/91534658
在这里插入图片描述

2.1.1 通过Interceptor实现数据的自动加解密

Mybatis默认提供了一个拦截器接口Interceptor,大部分Mybatis的增强工具都是通过该接口实现的。如果要实现自定义的拦截器,只需要实现 org.apache.ibatis.plugin.Interceptor 接口,该接口有三个方法:

Object intercept(Invocation invocation) throws Throwable;

Object plugin(Object target);

void setProperties(Properties properties);

首先以自定义一个注解@Crypt,作用在字段上,用于告诉拦截器那个字段需要加解密。

@Target({
   
    ElementType.FIELD,ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface Crypt {
   
   

}

接下来添加一个自定义拦截器,selelct方法时进行解密,update和add方法时进行加密。

@Intercepts({
   
    @Signature(type = Executor.class, method = "update", args = {
   
    MappedStatement.class, Object.class, }),
        @Signature(type = Executor.class, method = "query", args = {
   
    MappedStatement.class, Object.class,
                RowBounds.class, ResultHandler.class }),
        @Signature(type = ResultSetHandler.class, method = "handleResultSets", args = {
   
    Statement.class }) })
public class CryptInterceptor implements Interceptor {
   
   

    @Override
    public Object intercept(Invocation invocation) throws Throwable {
   
   
        Object[] args = invocation.getArgs();
        if (args.length <= 0 || invocation.getMethod() == null || args[0] == null) {
   
   
            return invocation.proceed();
        }

        String methodName = invocation.getMethod().getName();
        if ("update".
1.能够熟练使用Java进行企业级项目的开发,熟悉企业开发的流程,对面向对象编程(OOP)思想一定的理解。 2.熟练使用SpringMVC、Spring Boot、Spring、Mybatis等多种框架,了解一定的IOC和AOP的原理,利用AOP实现过权限控制,如:超级管理员身份和普通员工,部门负责人的数据权限进行控制。 3.熟悉使用MySQL等关系型数据库,能进行数据库的查询进行一定程度的优化。 5.熟悉使用Redis,作为缓存数据库,加快数据的缓存与处理。 6.熟悉前后端分离服务器的部署,进行服务器上项目利用Nginx进行代理和HTTPS证书密钥的配置。 7.熟悉LInux系统,能够编写Shell脚本和进行简单的数据优化和服务器性能的简单调优。 8.熟悉掌握HTML,CSS,JavaScript,Vue,Node.js等前端技术栈,擅长使用Element-plus进行界面的编写。 9.熟练掌握Gitee、Maven、Postman、IDEA、VScode等常用开发工具 10.了解Spring Cloud微服务,了解Kafka,Docker等技术栈,能使用消息队列进行高并发的处理。 11.能完成大多数接口文档的编写和特定数据的编写。 12.了解NIO和BIO的网络编程,熟悉Netty框架,参与过物联网数据平台的开发,并进行过软件与硬件的对接和数据处理。 13.熟悉若依框架,擅长处理若依本身的开发逻辑,如:生成文件名转规定的格式,导出Excel自增编号,权限控制等问题。 帮我优化一下这份简历的内容,最好是结合项目的实际应用做出举例,不要太过千篇一律,同时可以给我补齐Spring Security的技术并举例
03-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值