- 版本历史
- 一、 目的
- 二、 范围
- 三、 职责
- 3.1 安全组
- 3.2 数据提供方
- 3.3 数据使用方
- 四、 数据分级标准
- 4.1 机密
- 4.2 敏感
- 4.3 内部
- 4.4 公开
- 五、 数据安全保护标准
- 5.1 机密数据安全保护标准
- 5.2 敏感数据安全保护标准
- 5.2.1 WEB接口
- 5.2.2 WEB应用
- 5.2.3 日志文件
- 5.2.4 生产环境数据库
- 5.2.5 beta/dev环境数据库
- 5.2.6 数据仓库
- 5.2.7 其它
- 5.3 内部数据安全保护标准
- 5.4 公开数据安全保护标准
- 5.5 风险定级及整改时间要求
- 六、4 参考资料
- 6.1 mysql清洗参考方法
- 6.2 pg清洗参考方法
一、目的
明确信息数据分级标准,明确数据安全保护措施及要求。
二、范围
全公司
三、职责
3.1 安全组
制定和维护此安全标准,推动实施,审查执行情况,提出整改要求,采取强制措施控制风险。
3.2 数据提供方
按照此标准要求,对相关数据进行清洗,例如替换、打码、hash、加密等,合规后再提供给数据使用方。
3.3 数据使用方
按照此标准要求,在授权范围内合理使用数据,禁止扩散。
四、数据分级标准
4.1 机密
机密数据范围包括但不限于:
- 持卡人资料,主要是卡号
- HR薪资信息等
注意,持卡人敏感验证数据严禁以任何形式存储,包括:完整的磁条数据、CAV2、CVV、CVV2、CID、PIN
4.2 敏感
敏感数据范围包括但不限于:
- 用户的电话号码、传真号码、电子邮箱地址、通讯地址、证件号、QQ号、密码、密保问题及答案
- cookie中的身份认证信息,例如”_v”
- 持卡人资料,包括:持卡人姓名、有效期、业务代码
注意:如果其它属性/字段含上述敏感数据,那么此属性/字段也属于敏感数据范围。
例如,如果”account”字段允许以手机号码或邮箱形式存在,那么”account”字段也属于敏感数据。
4.3 内部
内部数据范围包括但不限于:公司所有的研究方法、培训资料、客户资料、财务数据、技术文档、产品文档、源代码等
4.4 公开
例如公司网站各种产品信息,公开的财报,公司新闻动态等信息。
五、数据安全保护标准
5.1 机密数据安全保护标准
- 机密数据的安全保护标准参照敏感数据的安全保护标准
- 持卡人相关数据的安全保护,需同时符合PCI-DSS标准
- 额外的保护措施待定
5.2 敏感数据安全保护标准
5.2.1 WEB接口
禁止通过GET参数传递敏感数据,以防止在访问日志中留下记录。注意,这种方式也是禁止的
POST /api?mobile=13812345678 HTTP/1.0
Host: xx
虽然是POST方法,但在GET参数仍然有敏感数据。
正确的方法应该是把参数放在POST请求的body中。
5.2.2 WEB应用
- 公开系统
- 除了在特定状态或场景(生成订单和等待支付),其它状态或场景下,敏感数据应该做打码处理,打码标准参见《应用系统设计开发安全标准》
- 内部后台
- 如果业务场景不需要用到敏感数据,应该进行打码处理
- 如果业务场景需要用到敏感数据,可以明文展示,但仅限单条数据。
- 任何权限,包括超级管理员,都禁止有批量查询/导出敏感数据的功能或权限。超过1条数据即算批量。
- 特殊的业务场景,VP特别授权后,可以有批量查询/导出敏感数据的功能或权限。
- 查询敏感数据的操作,应该记录日志。日志内容需要包括:时间、IP、用户名、查询条件等。
5.2.3 日志文件
日志文件范围包括但不限于:业务日志、调试日志、错误日志等。原则:不可直接查看到明文的敏感数据,不可通过密钥解密出敏感数据。具体要求:
- 禁止记录明文的敏感数据
- 禁止记录加密后的数据
- 禁止记录不带salt的单向hash数据
- 如业务有特殊需求,经安全组审批后,可记录带salt的单向hash数据,salt必须是15位以上的随机字符
- 可记录打码后的敏感数据,打码标准参见《应用系统设计开发安全标准》
5.2.4 生产环境数据库
- 禁止任何人(包括dba)用业务系统中的用户名/密码操作生产数据库
- 禁止DEV/QA增删改查生产数据库,此类操作需dba同意,并由dba执行
- 禁止导出业务数据、用户数据,此类操作需dba和安全组同意,并由dba执行
- 特殊情况
- 为支持在特殊情况下开发团队能及时处理问题、观察数据,经bu开发leader和dba同意后,可以给少量开发人员开通独立的只读权限帐号,报备给安全组
- 对于存在数据库中的业务系统用的配置数据,应该通过业务系统功能进行操作,来不及做的系统,可以由dba授权开发人员进行操作
- 极特殊情况下,在得到dba/bu开发leader的同意下(譬如故障处理的时候),开发可以操作数据库,但事后需要完整提交命令给dba和安全组进行审计
- 每个数据库帐号均应该限制登录来源。如果来源是IP,必须精确匹配,不能是IP段。如果来源是主机名,可以是一组相同命名规则的通配符主机名,例如l-ttsweb*.f.cn1
- 数据库离开生产环境前,必须对敏感数据做清洗,由DBA负责,具体清洗标准根据目的地来定
- 数据库备份必须进行加密,标准参见《重要数据备份文件安全加密标准》
5.2.5 beta/dev环境数据库
敏感数据从生产环境数据库进入beta/dev环境前,必须进行清洗。原则是:不可直接查看到明文的敏感数据,不可通过密钥解密出敏感数据。具体要求为:
- 可用完全替换的方法,例如用一个内部的手机号,替换用户真实的手机号
- 可用打码的方法,打码标准参见《应用系统设计开发安全标准》
- 如业务有特殊需求,经安全组审批后,可用带salt的单向hash,salt必须是15位以上的随机字符,salt由DBA保管
5.2.6 数据仓库
敏感数据从生产环境进入数据仓库前,必须进行清洗。原则是:不可直接查看到明文的敏感数据,可通过密钥解密出敏感数据。具体要求为:
- 可用完全替换的方法,例如用一个内部的手机号,替换用户真实的手机号
- 可用打码的方法,打码标准参见《应用系统设计开发安全标准》
- 如业务有特殊需求,经安全组审批后,可用带salt的单向hash,salt必须是15位以上的随机字符,salt由DBA保管
- 如业务有特殊需求,经安全组审批后,可用3DES/AES对数据进行加密,密钥必须是20位以上随机字符,密钥由DBA保管
5.2.7 其它
市场营销等业务需求,需要抽取指定条件的敏感信息时,
- 如果需要发邮件,邮件地址通过系统对接提供给EDM,敏感数据不能由业务人员经手
- 如果需要发短信,手机号码通过系统对接提供给短信部门,敏感数据不能由业务人员经手
- 如果需要提供给第三方,或者其它需求,由安全组评估解决方案
5.3 内部数据安全保护标准
- 内部系统和数据应有明确的owner,如无明确owner,由安全组接管并处置
- 内部系统和数据应由owner明确授权后才能访问
- 禁止将内部数据扩散给无权限接触的第三人
- 禁止将内部数据公布到互联网,例如:微博、微信、博客、在线文库、在线代码仓库、BBS、网盘等
- 代码开源前,应获取本部门技术负责人、安全组和CTO授权
- 行业技术交流沙龙、会议,如涉及分享公司内部数据,应获取本部门技术负责人授权,并向安全组报备
5.4 公开数据安全保护标准
暂无
5.5 风险定级及整改时间要求
- 访问日志、业务日志、调试日志、错误日志等日志文件中
- 如果以不合规的方式记录了机密数据,定级为高风险漏洞,要求4小时内处理完毕
- 如果以不合规的方式记录了敏感数据,定级为中高风险漏洞,要求3天内处理完毕
- 其它类型风险的定级和整改时间要求,根据具体场景由安全组和业务线商量,有争议的升级解决
六、参考资料
把下列SQL语句中的DB、TABLE、COLUMN替换成对应的库名、表名、字段名即可。
如果不进行打码处理,也可以把数据都统一替换成QA/DEV人员的手机号、email、证件号等。
6.1 mysql清洗参考方法
银行卡号(显示后四位,效果****1234)
update ignore DB.TABLE set COLUMN=concat('****',substr(COLUMN,-4)) where COLUMN rlike '^[0-9]{12,19}$';
手机号(显示前三位和后四位,效果186****5678)
update ignore DB.TABLE set COLUMN=concat(substr(COLUMN,1,3),'****',substr(COLUMN,-4)) where COLUMN rlike '^1[0-9]{10}$';
证件号(显示前四位和后三位,效果0010********123)
update ignore DB.TABLE set COLUMN=concat(substr(COLUMN,1,4),'****',substr(COLUMN,-3)) where COLUMN rlike '^[0-9]{17}[0-9xX]$';
email(显示@符号前三位和@符号及之后,效果abc****@gmail.com)
update ignore DB.TABLE set COLUMN=concat(substr(COLUMN,1,3),'****',substr(COLUMN,locate('@',COLUMN))) where COLUMN like '%@%';
6.2 pg清洗参考方法
银行卡号(显示后四位,效果****1234)
\c DB;
update TABLE set COLUMN=concat('****',right(COLUMN,4)) where COLUMN ~ '^[0-9]{12,19}$';
手机号(显示前三位和后四位,效果186****5678)
\c DB;
update TABLE set COLUMN=concat(left(COLUMN,3),'****',right(COLUMN,4)) where COLUMN ~ '^1[0-9]{11}$';
证件号(显示前四位和后三位,效果0010********123)
\c DB;
update TABLE set COLUMN=concat(left(COLUMN,4),'****',right(COLUMN,3)) where COLUMN ~ '^[0-9]{17}[0-9xX]$';
email(显示@符号前三位和@符号及之后,效果abc****@gmail.com)
\c DB;
update TABLE set COLUMN=concat(left(COLUMN,3),'****',substring(COLUMN from '@.*')) where COLUMN like '%@%';
能单独要这一个文档嘛,目前只需要这一个!可以的话,麻烦带价回复一下邮件,麻烦了!
《XX公司应急响应操作规范》
回复错地址了,是上面那个文档