jaredhanson / jaredhanson/passport-http
BASIC strategy does not support passwords that contain colons
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 261
- Forks
- 112
- PR merge metrics
- No merged PRs in 30d
Description
Colons are legal characters in passwords. Because of the way the BASIC strategy splits the BASIC username:password header, passwords containing a colon character fail. Per the following code from basic.js:
var scheme = parts[0]
, credentials = new Buffer(parts[1], 'base64').toString().split(':');
if (!/Basic/i.test(scheme)) { return this.fail(this._challenge()); }
if (credentials.length < 2) { return this.fail(400); }
var userid = credentials[0];
var password = credentials[1];
you can see that a split(':') on "myusername:my:password" will result in 3 parts instead of the expected 2. Better to use something like:
.split(':').slice(1).join(':')
or a regexp to get the password. Not sure that I can work up a patch before the new year, but reporting the issue now.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in basic.js and inspect how the decoded Basic credentials are split into a user ID and password. Verify handling for a password such as "my:password" and confirm that the full password is preserved while the existing invalid-header behavior remains unchanged.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript
- Domain
- authentication, backend
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 45/100