User with a password containing '#' can be created, but cannot be loged in.
This is because the password for authentication is sent in a non-encoded query parameter.
As a minimum, the query parameter should be encoded.
An even better solution would be to send credentials in a request body. Although the query parameter is sent over Secure HTTP, the incoming URL with parameters may still be logged in servers, and browsers may save requests in history, which raises security concerns.
Steps to Reproduce
Create a user with a password containing '#' character. E.g. 'password#123'.
Try to log in with that user.
Expected Behaviour
User can log in.
Actual Behaviour
User cannot log in because '#' character and everything after that gets ignored by the browser.
Description
User with a password containing '#' can be created, but cannot be loged in. This is because the password for authentication is sent in a non-encoded query parameter. As a minimum, the query parameter should be encoded. An even better solution would be to send credentials in a request body. Although the query parameter is sent over Secure HTTP, the incoming URL with parameters may still be logged in servers, and browsers may save requests in history, which raises security concerns.
Steps to Reproduce
Expected Behaviour
User can log in.
Actual Behaviour
User cannot log in because '#' character and everything after that gets ignored by the browser.