-
-
Notifications
You must be signed in to change notification settings - Fork 2.4k
BUG(isJWT): validate decoded header and payload as JSON objects #2677
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
base: master
Are you sure you want to change the base?
Changes from 6 commits
657328d
3233fb7
d141406
f44c09e
018dfb4
32c48e3
6853ed2
eaeaeb0
81ac039
cdea4ec
6aae9bc
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
| @@ -1,15 +1,65 @@ | ||||||||
| import assertString from './util/assertString'; | ||||||||
| import isBase64 from './isBase64'; | ||||||||
|
|
||||||||
| /* istanbul ignore next */ | ||||||||
| function decodeBase64Url(b64) { | ||||||||
| if (typeof Buffer !== 'undefined') { | ||||||||
| if (typeof Buffer.from === 'function') { | ||||||||
| return Buffer.from(b64, 'base64').toString('utf8'); | ||||||||
| } | ||||||||
| // eslint-disable-next-line no-buffer-constructor | ||||||||
| return new Buffer(b64, 'base64').toString('utf8'); | ||||||||
| } | ||||||||
| if (typeof atob === 'function') { | ||||||||
| const binary = atob(b64); | ||||||||
| if (typeof TextDecoder !== 'undefined') { | ||||||||
| const bytes = new Uint8Array(binary.length); | ||||||||
| for (let i = 0; i < binary.length; i += 1) { | ||||||||
| bytes[i] = binary.charCodeAt(i); | ||||||||
| } | ||||||||
| return new TextDecoder('utf-8').decode(bytes); | ||||||||
| } | ||||||||
| let encoded = ''; | ||||||||
| for (let i = 0; i < binary.length; i += 1) { | ||||||||
| const code = binary.charCodeAt(i).toString(16).padStart(2, '0'); | ||||||||
|
||||||||
| const code = binary.charCodeAt(i).toString(16).padStart(2, '0'); | |
| const hex = binary.charCodeAt(i).toString(16); | |
| const code = hex.length === 1 ? `0${hex}` : hex; |
Kartikeya-guthub marked this conversation as resolved.
Show resolved
Hide resolved
Kartikeya-guthub marked this conversation as resolved.
Show resolved
Hide resolved
Kartikeya-guthub marked this conversation as resolved.
Show resolved
Hide resolved
| Original file line number | Diff line number | Diff line change | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -5542,13 +5542,27 @@ describe('Validators', () => { | |||||||||
| 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb3JlbSI6Imlwc3VtIn0.ymiJSsMJXR6tMSr8G9usjQ15_8hKPDv_CArLhxw28MI', | ||||||||||
| 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkb2xvciI6InNpdCIsImFtZXQiOlsibG9yZW0iLCJpcHN1bSJdfQ.rRpe04zbWbbJjwM43VnHzAboDzszJtGrNsUxaqQ-GQ8', | ||||||||||
| 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqb2huIjp7ImFnZSI6MjUsImhlaWdodCI6MTg1fSwiamFrZSI6eyJhZ2UiOjMwLCJoZWlnaHQiOjI3MH19.YRLPARDmhGMC3BBk_OhtwwK21PIkVCqQe8ncIRPKo-E', | ||||||||||
| 'eyJhbGciOiJub25lIn0.eyJpc3MiOiJqb2UiLCJleHAiOjEzMDA4MTkzODAsImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ.', | ||||||||||
| ], | ||||||||||
| invalid: [ | ||||||||||
| 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9', | ||||||||||
| 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NSIsIm5hbWUiOiJKb2huIERvZSIsImlhdCI6MTUxNjIzOTAyMn0', | ||||||||||
| 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NSIsIm5hbWUiOiJKb2huIERvZSIsImlhdCI6MTYxNjY1Mzg3Mn0.eyJpc3MiOiJodHRwczovL2V4YW1wbGUuY29tIiwiaWF0IjoxNjE2NjUzODcyLCJleHAiOjE2MTY2NTM4ODJ9.a1jLRQkO5TV5y5ERcaPAiM9Xm2gBdRjKrrCpHkGr_8M', | ||||||||||
| '$Zs.ewu.su84', | ||||||||||
| 'ks64$S/9.dy$§kz.3sd73b', | ||||||||||
| 'foo.bar.', | ||||||||||
| '..', | ||||||||||
| '.t.', | ||||||||||
| 'foo.bar.baz', | ||||||||||
| 'Zm9v.YmFy.', | ||||||||||
|
Comment on lines
+5553
to
+5557
|
||||||||||
| 'eyJmb28iOiJiYXIifQ.YmFy.', | ||||||||||
| 'Zm9v.eyJiYXIiOiJiYXoifQ.', | ||||||||||
| 'W10=.eyJiYXIiOiJiYXoifQ.', | ||||||||||
| 'eyJmb28iOiJiYXIifQ.W10=.', | ||||||||||
|
||||||||||
| 'W10=.eyJiYXIiOiJiYXoifQ.', | |
| 'eyJmb28iOiJiYXIifQ.W10=.', | |
| 'W10.eyJiYXIiOiJiYXoifQ.', | |
| 'eyJmb28iOiJiYXIifQ.W10.', |
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.
/* istanbul ignore next */ondecodeBase64Url()will exclude the entire helper from coverage, even though it’s now part ofisJWT()’s core behavior. Prefer removing this ignore, or scoping ignores to the genuinely untestable branches (e.g., theatobpath) so Node-based tests still cover the main decoding logic.