如何实现payload存在username和password时掩码,无则跳过掩码直接透传?
Payload敏感字段掩码判断逻辑实现方案
核心逻辑是先校验传入的payload对象中是否存在username或password任意一个字段,只要存在其中一个就触发掩码逻辑,两个都不存在时直接返回原payload传输即可。
通用实现步骤
- 步骤1:接收传入的payload参数,先做非空/类型校验,避免空值或非对象类型报错
- 步骤2:判断payload中是否包含
username或者password字段(业务场景通常仅判断对象自身属性,不包含原型链继承属性) - 步骤3:如果两个字段都不存在,直接返回原payload;如果存在任意一个,对存在的字段执行掩码替换后返回处理后的payload
JavaScript 实现示例
function processPayload(payload) { // 合法性校验 if (!payload || typeof payload !== 'object') return payload; // 判断是否存在敏感字段 const hasSensitiveField = payload.hasOwnProperty('username') || payload.hasOwnProperty('password'); // 无敏感字段直接返回 if (!hasSensitiveField) return payload; // 有敏感字段执行掩码逻辑 const maskedPayload = {...payload}; if (maskedPayload.username) { // 用户名掩码示例:保留首字符,剩余替换为* maskedPayload.username = maskedPayload.username.slice(0,1) + '*'.repeat(maskedPayload.username.length - 1); } if (maskedPayload.password) { // 密码通常全掩码 maskedPayload.password = '*'.repeat(maskedPayload.password.length); } return maskedPayload; }
Python 实现示例
def process_payload(payload: dict) -> dict: # 合法性校验 if not isinstance(payload, dict): return payload # 判断是否存在敏感字段 has_sensitive_field = 'username' in payload or 'password' in payload if not has_sensitive_field: return payload # 执行掩码逻辑 masked_payload = payload.copy() if 'username' in masked_payload: username = masked_payload['username'] masked_payload['username'] = username[0] + '*' * (len(username) - 1) if username else '' if 'password' in masked_payload: password = masked_payload['password'] masked_payload['password'] = '*' * len(password) if password else '' return masked_payload
注意:如果你的payload是嵌套结构,需要额外增加递归遍历逻辑判断内层对象是否包含敏感字段;如果payload是JSON字符串格式,需要先反序列化为对象再执行判断,处理完成后再序列化回字符串即可。
内容的提问来源于stack exchange,提问作者Pavan Kalyan
相关产品推荐
相关产品推荐

