
1) 【一句话结论】铁路客票系统对用户个人信息(身份证号、手机号)的防护需从数据全生命周期(采集、传输、存储、使用、销毁)设计,核心是“加密传输+存储脱敏+细粒度访问控制+审计追踪”,确保合规与安全。
2) 【原理/概念讲解】
数据安全防护需围绕“加密、脱敏、访问控制”三大技术,结合业务场景实现:
3) 【对比与适用场景】
| 技术类型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 数据加密 | 对敏感数据进行算法转换,使其不可读 | 传输/存储安全,需解密才能使用 | 传输(如API请求)、存储(数据库字段) | 需考虑性能(如AES加密/解密耗时)和密钥管理(如密钥存储在HSM) |
| 数据脱敏 | 对敏感信息进行部分隐藏或替换 | 静态/动态处理,不影响业务逻辑 | 业务查询(如用户自查订单)、数据共享(如第三方合作) | 需保证脱敏后信息可识别(如身份证号前6后4) |
| 访问控制 | 限制用户对数据的操作权限 | 细粒度权限管理,结合身份认证 | 系统内部操作(如管理员修改数据)、外部接口调用 | 需定期审计权限(如每季度检查角色权限) |
4) 【示例】
以“存储身份证号”和“用户查询订单”为例:
from cryptography.fernet import Fernet
key = Fernet.generate_key() # 密钥安全存储
cipher_suite = Fernet(key)
def store_user_info(user_id, id_number, phone):
# 加密身份证号
encrypted_id = cipher_suite.encrypt(id_number.encode())
# 存储到数据库(字段类型为加密字段)
db.execute("INSERT INTO user_info (user_id, encrypted_id, phone) VALUES (?, ?, ?)",
(user_id, encrypted_id, phone))
def query_user_order(user_id, order_id):
# 先解密获取原始身份证号
result = db.execute("SELECT encrypted_id FROM user_info WHERE user_id = ?", (user_id,))
if result:
original_id = cipher_suite.decrypt(result[0].encrypted_id).decode()
# 动态脱敏(中间4位替换*)
masked_id = f"{original_id[:6]}****{original_id[-4:]}"
return {"order_id": order_id, "masked_id": masked_id}
return None
5) 【面试口播版答案】
“铁路客票系统对用户个人信息(身份证号、手机号)的防护,核心是全生命周期管理。首先,传输和存储环节用加密:API请求用TLS 1.3加密传输,防止中间人攻击;数据库存储用AES-256加密身份证号字段,防止存储泄露。然后,业务场景下,比如用户查询订单时,先解密获取原始身份证号,再进行动态脱敏(中间4位替换*),只返回脱敏后的信息给用户。另外,访问控制方面,采用RBAC模型,售票员只能操作自己负责的车次数据,管理员有全权限,通过角色绑定权限,确保最小权限原则。最后,加上审计日志,记录谁在什么时间访问了什么数据,用于追踪和合规检查。这样从加密、脱敏、访问控制三方面,结合业务场景实现防护。”
6) 【追问清单】
7) 【常见坑/雷区】