Skip to content

Commit 85ee40e

Browse files
Update regex patterns to securely redact PII
1 parent 776ed72 commit 85ee40e

4 files changed

Lines changed: 27 additions & 10 deletions

File tree

package-lock.json

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,14 +102,14 @@
102102
"sqliteExplorer.defaultPageSize": {
103103
"type": "number",
104104
"minimum": 10,
105-
"maximum": 1e5,
105+
"maximum": 100000,
106106
"default": 500,
107107
"markdownDescription": "Default number of rows to display per page."
108108
},
109109
"sqliteExplorer.maxRows": {
110110
"type": "number",
111111
"minimum": 0,
112-
"maximum": 1e7,
112+
"maximum": 10000000,
113113
"default": 0,
114114
"markdownDescription": "Maximum number of rows to load from a table. Set to 0 for unlimited."
115115
},

src/helpers.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,8 @@ const EMAIL_REGEX = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g;
214214
const PHONE_REGEX = /(\+?\d{1,3}[-.\s]?)?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}/g;
215215
const API_KEY_REGEX = /\b(sk_live_|sk_test_|api_key_|token_|secret_|key_)[a-zA-Z0-9]{10,}\b/gi;
216216
const HEX_REGEX = /\b[a-fA-F0-9]{32,}\b/g;
217-
const CC_REGEX = /\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b/g;
218-
const SSN_REGEX = /\b\d{3}-\d{2}-\d{4}\b/g;
217+
const CC_REGEX = /\b(?:\d[ -]*?){13,16}\b/g;
218+
const SSN_REGEX = /\b\d{3}[-\s]?\d{2}[-\s]?\d{4}\b/g;
219219

220220
/**
221221
* Masks sensitive data like emails, phone numbers, API keys, hex strings,
@@ -227,10 +227,10 @@ const SSN_REGEX = /\b\d{3}-\d{2}-\d{4}\b/g;
227227
export function maskSensitiveData(message: string): string {
228228
let safeMessage = message;
229229
safeMessage = safeMessage.replace(EMAIL_REGEX, '***@***.***');
230+
safeMessage = safeMessage.replace(CC_REGEX, '****-****-****-****');
230231
safeMessage = safeMessage.replace(PHONE_REGEX, '***-***-****');
231232
safeMessage = safeMessage.replace(API_KEY_REGEX, '$1[REDACTED]');
232233
safeMessage = safeMessage.replace(HEX_REGEX, '[REDACTED_HEX]');
233-
safeMessage = safeMessage.replace(CC_REGEX, '****-****-****-****');
234234
safeMessage = safeMessage.replace(SSN_REGEX, '***-**-****');
235235
return safeMessage;
236236
}

tests/unit/helpers.test.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,3 +137,20 @@ describe('uiKindToString', () => {
137137
assert.strictEqual(uiKindToString(vsc.UIKind.Desktop), 'desktop');
138138
});
139139
});
140+
141+
describe('maskSensitiveData', () => {
142+
const { maskSensitiveData } = require('../../src/helpers');
143+
144+
it('should mask different formats of credit card numbers', () => {
145+
assert.strictEqual(maskSensitiveData("My CC is 1234-5678-9012-3456"), "My CC is ****-****-****-****");
146+
assert.strictEqual(maskSensitiveData("My CC is 1234567890123456"), "My CC is ****-****-****-****");
147+
assert.strictEqual(maskSensitiveData("My CC is 1234 5678 9012 3456"), "My CC is ****-****-****-****");
148+
assert.strictEqual(maskSensitiveData("Amex: 378282246310005"), "Amex: ****-****-****-****");
149+
});
150+
151+
it('should mask different formats of SSN', () => {
152+
assert.strictEqual(maskSensitiveData("My SSN is 123-45-6789"), "My SSN is ***-**-****");
153+
assert.strictEqual(maskSensitiveData("My SSN is 123 45 6789"), "My SSN is ***-**-****");
154+
assert.strictEqual(maskSensitiveData("My SSN is 123456789"), "My SSN is ***-**-****");
155+
});
156+
});

0 commit comments

Comments
 (0)