fix: 扩展运行时证据文本脱敏
This commit is contained in:
parent
7f4ff45938
commit
340cb073be
@ -9,7 +9,7 @@ const REDACTED_BASE64_VALUE = '<redacted-base64>';
|
|||||||
const SENSITIVE_KEY_PATTERN =
|
const SENSITIVE_KEY_PATTERN =
|
||||||
/password|secret|token|authorization|cookie|privatekey|sshkey|ticket|randstr|replytext|base64/i;
|
/password|secret|token|authorization|cookie|privatekey|sshkey|ticket|randstr|replytext|base64/i;
|
||||||
const SENSITIVE_TEXT_KEY_PATTERN =
|
const SENSITIVE_TEXT_KEY_PATTERN =
|
||||||
'password|secret|token|authorization|cookie|private[_-]?key|ssh[_-]?key|ticket|randstr|replyText|sid';
|
'(?:[A-Za-z0-9_-]*(?:password|secret|token|authorization|cookie|private[_-]?key|ssh[_-]?key|ticket|randstr|replyText|base64)[A-Za-z0-9_-]*|sid)';
|
||||||
const SENSITIVE_TEXT_REPLACEMENTS: Array<[RegExp, string]> = [
|
const SENSITIVE_TEXT_REPLACEMENTS: Array<[RegExp, string]> = [
|
||||||
[
|
[
|
||||||
/data:[a-z0-9.+-]+\/[a-z0-9.+-]+;base64,[a-z0-9+/=\r\n]+/gi,
|
/data:[a-z0-9.+-]+\/[a-z0-9.+-]+;base64,[a-z0-9+/=\r\n]+/gi,
|
||||||
@ -26,8 +26,11 @@ const SENSITIVE_TEXT_REPLACEMENTS: Array<[RegExp, string]> = [
|
|||||||
'$1$2$1:$3<redacted>$3',
|
'$1$2$1:$3<redacted>$3',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
new RegExp(`\\b(${SENSITIVE_TEXT_KEY_PATTERN})\\s*=\\s*[^\\s,;&]+`, 'gi'),
|
new RegExp(
|
||||||
'$1=<redacted>',
|
`\\b(${SENSITIVE_TEXT_KEY_PATTERN})(\\s*[:=]\\s*)[^\\s,;&]+`,
|
||||||
|
'gi',
|
||||||
|
),
|
||||||
|
'$1$2<redacted>',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@ -216,4 +216,37 @@ describe('RuntimeEvidenceService', () => {
|
|||||||
expect(serialized).toContain('captcha evidence');
|
expect(serialized).toContain('captcha evidence');
|
||||||
expect(serialized).toContain('kept');
|
expect(serialized).toContain('kept');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('redacts compound token and secret text keys while preserving session identifiers', () => {
|
||||||
|
const service = new RuntimeEvidenceService();
|
||||||
|
|
||||||
|
const record = service.createRecord({
|
||||||
|
title: 'compound token evidence',
|
||||||
|
taskType: 'api',
|
||||||
|
project: 'kt-template-online-api',
|
||||||
|
environment: 'local',
|
||||||
|
operation: 'admin-login',
|
||||||
|
target: 'sessionId=KT_SCAN_SAFE',
|
||||||
|
status: 'failed',
|
||||||
|
details: {
|
||||||
|
sessionId: 'KT_SCAN_SAFE',
|
||||||
|
text:
|
||||||
|
'accessToken=raw-access-token refreshToken=raw-refresh-token access_token=raw-snake-token client_secret=raw-client-secret sessionId=KT_SCAN_SAFE',
|
||||||
|
jsonText:
|
||||||
|
'{"accessToken":"raw-json-access","refreshToken":"raw-json-refresh","access_token":"raw-json-snake","client_secret":"raw-json-client-secret","sessionId":"KT_SCAN_SAFE"}',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const serialized = JSON.stringify(record);
|
||||||
|
|
||||||
|
expect(serialized).not.toContain('raw-access-token');
|
||||||
|
expect(serialized).not.toContain('raw-refresh-token');
|
||||||
|
expect(serialized).not.toContain('raw-snake-token');
|
||||||
|
expect(serialized).not.toContain('raw-client-secret');
|
||||||
|
expect(serialized).not.toContain('raw-json-access');
|
||||||
|
expect(serialized).not.toContain('raw-json-refresh');
|
||||||
|
expect(serialized).not.toContain('raw-json-snake');
|
||||||
|
expect(serialized).not.toContain('raw-json-client-secret');
|
||||||
|
expect(serialized).toContain('KT_SCAN_SAFE');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user