mirror of
https://github.com/esphome/esphome.git
synced 2026-03-01 02:14:19 -07:00
[dashboard] Handle malformed Basic Auth headers gracefully
Wrap base64 decode and split in try/except so malformed Authorization headers return a clean 401 instead of an unhandled exception producing a 500 response with stack trace in logs. Catches ValueError (covers binascii.Error from b64decode) and UnicodeDecodeError (from .decode()).
This commit is contained in:
@@ -120,8 +120,11 @@ def is_authenticated(handler: BaseHandler) -> bool:
|
||||
if auth_header := handler.request.headers.get("Authorization"):
|
||||
assert isinstance(auth_header, str)
|
||||
if auth_header.startswith("Basic "):
|
||||
auth_decoded = base64.b64decode(auth_header[6:]).decode()
|
||||
username, password = auth_decoded.split(":", 1)
|
||||
try:
|
||||
auth_decoded = base64.b64decode(auth_header[6:]).decode()
|
||||
username, password = auth_decoded.split(":", 1)
|
||||
except (ValueError, UnicodeDecodeError):
|
||||
return False
|
||||
return settings.check_password(username, password)
|
||||
return handler.get_secure_cookie(AUTH_COOKIE_NAME) == COOKIE_AUTHENTICATED_YES
|
||||
|
||||
|
||||
Reference in New Issue
Block a user