-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[PLAT-639] Add credentials obfuscation #33
Conversation
Codecov Report
@@ Coverage Diff @@
## master #33 +/- ##
=====================================
Coverage 100% 100%
=====================================
Files 4 4
Lines 39 44 +5
=====================================
+ Hits 39 44 +5
Continue to review full report at Codecov.
|
Codecov Report
@@ Coverage Diff @@
## master #33 +/- ##
=====================================
Coverage 100% 100%
=====================================
Files 4 4
Lines 39 42 +3
=====================================
+ Hits 39 42 +3
Continue to review full report at Codecov.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM some comment about default regexp
streams/sensitive-data.js
Outdated
{ | ||
regex: new RegExp(`${this.fragments}=([\\w-]*)`, 'ig'), // @Match mdp=My-super-password | ||
substitute: `$1=${this.replacer}`, | ||
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we should only have the first regexp by default to be iso with the actual version of the logger.
And the second regex should only be used in nestor-api
const sensitiveDataPattern = [ | ||
{ | ||
regex: YOUR_NEW_REGEX, | ||
substitute: SUBSTITUTION_CONTENT, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure we need to change the substitute I think we can forced to be SENSITIVE_DATA
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Indeed, it isn't realy about SENISITIVE_DATA but more about the whole pattern replacement such as :
"password":"WHATEVER"
-> "$1":"WHATEVERE"
which needs dots and quotes.
Althought password=whatever
- > $1=WHATEVER
doesn't need.
streams/sensitive-data.js
Outdated
regex: new RegExp(`"${this.fragments}":"([^"]*)"`, 'ig'), // @Match "mdp":"My super password" | ||
substitute: `"$1":"${this.replacer}"`, | ||
}, | ||
{ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would remove this case from the default regexp to keep the same behaviour as before.
const sensitiveDataPattern = [ | ||
{ | ||
regex: YOUR_NEW_REGEX, | ||
substitute: SUBSTITUTION_CONTENT, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we really need to specify a substitute? the default one should be enough? Don't you think?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Substitute is indeed replacement pattern like "$1":"__SENSITIVE_DATA__"
, and it is not the same depending on cases, sometimes we need quotes, for other ones we don't necessarily need.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If it is just to avoid double quote in the equal case, I keep thinking it is not necessary.
let sanitized = input; | ||
|
||
// Apply replace on input looping through patterns array | ||
for (let pattern of this.patterns) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All the logging process is done synchronously, we must ensure this array has not too many items because it could lead to performance issues.
If we don't do anything in code we must at least warn the users in the documentation.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I just updated README because for the moment there is no usage of this functionality. But if you prefer I can update code.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Purpose of this PR
To be clean with sentry implementation, we need to obfuscate some critical information in logs such as
TOKEN=MY_TOKEN
or"token": "My token"
.Changes
password=My-super-password
inlog.msg
is now obfuscated by default ;SensitiveDataStream
has changed :fragments
-> Example :(password|mdp)
;patterns
-> Example :[{ regex: YOUR_REGEX, substitute: SUBSTITUTION_CONTENT }]
;