fix: mask secrets when characters get uri encoded
This commit is contained in:
		
							parent
							
								
									63fa143023
								
							
						
					
					
						commit
						ca90b34c4a
					
				| @ -11,7 +11,12 @@ module.exports = (env) => { | |||||||
|     return /token|password|credential|secret|private/i.test(envVar) && size(env[envVar].trim()) >= SECRET_MIN_SIZE; |     return /token|password|credential|secret|private/i.test(envVar) && size(env[envVar].trim()) >= SECRET_MIN_SIZE; | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   const regexp = new RegExp(toReplace.map((envVar) => escapeRegExp(env[envVar])).join('|'), 'g'); |   const regexp = new RegExp( | ||||||
|  |     toReplace | ||||||
|  |       .map((envVar) => `${escapeRegExp(env[envVar])}|${encodeURI(escapeRegExp(env[envVar]))}`) | ||||||
|  |       .join('|'), | ||||||
|  |     'g' | ||||||
|  |   ); | ||||||
|   return (output) => |   return (output) => | ||||||
|     output && isString(output) && toReplace.length > 0 ? output.toString().replace(regexp, SECRET_REPLACEMENT) : output; |     output && isString(output) && toReplace.length > 0 ? output.toString().replace(regexp, SECRET_REPLACEMENT) : output; | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -24,6 +24,14 @@ test('Replace sensitive environment variable matching specific regex for "privat | |||||||
|   t.is(hideSensitive(env)(`https://host.com?token=${env.privateKey}`), `https://host.com?token=${SECRET_REPLACEMENT}`); |   t.is(hideSensitive(env)(`https://host.com?token=${env.privateKey}`), `https://host.com?token=${SECRET_REPLACEMENT}`); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
|  | test('Replace url-encoded environment variable', (t) => { | ||||||
|  |   const env = {privateKey: 'secret '}; | ||||||
|  |   t.is( | ||||||
|  |     hideSensitive(env)(`https://host.com?token=${encodeURI(env.privateKey)}`), | ||||||
|  |     `https://host.com?token=${SECRET_REPLACEMENT}` | ||||||
|  |   ); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
| test('Escape regexp special characters', (t) => { | test('Escape regexp special characters', (t) => { | ||||||
|   const env = {SOME_CREDENTIALS: 'p$^{.+}\\w[a-z]o.*rd'}; |   const env = {SOME_CREDENTIALS: 'p$^{.+}\\w[a-z]o.*rd'}; | ||||||
|   t.is( |   t.is( | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user