From 27de2b8098f1f8c16873a592bfda2c09b7fc7b3b Mon Sep 17 00:00:00 2001 From: MauroAntonino Date: Wed, 21 Feb 2024 13:04:01 -0300 Subject: [PATCH 1/2] verify if is a websocket connection --- src/websockets/sync/server.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/websockets/sync/server.py b/src/websockets/sync/server.py index a070edf18..ebc1d61e1 100644 --- a/src/websockets/sync/server.py +++ b/src/websockets/sync/server.py @@ -263,6 +263,14 @@ def __exit__( ) -> None: self.shutdown() +def is_websocket(connection): + """ + return True if the connection is a websocket + + """ + upgrade_header = connection.__dict__.get('request').headers.get('Upgrade', '') + connection_header = connection.__dict__.get('request').headers.get('Connection', '') + return upgrade_header.lower() == 'websocket' and connection_header.lower() == 'upgrade' def serve( handler: Callable[[ServerConnection], None], @@ -508,7 +516,14 @@ def protocol_select_subprotocol( return try: - handler(connection) + protocol.logger.error(connection.__dict__.get('request').headers + , exc_info=True) + protocol.logger.error(is_websocket(connection) + , exc_info=True) + if is_websocket(connection): + handler(connection) + else: + connection.close() except Exception: protocol.logger.error("connection handler failed", exc_info=True) connection.close(CloseCode.INTERNAL_ERROR) From 96c273eee34f40d00085e4255afefc3b346a8f0a Mon Sep 17 00:00:00 2001 From: MauroAntonino Date: Mon, 26 Feb 2024 09:41:42 -0300 Subject: [PATCH 2/2] =?UTF-8?q?fix=20websocket=20header=20verification?= =?UTF-8?q?=C2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/websockets/sync/server.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/websockets/sync/server.py b/src/websockets/sync/server.py index ebc1d61e1..b8eff9c5a 100644 --- a/src/websockets/sync/server.py +++ b/src/websockets/sync/server.py @@ -516,14 +516,8 @@ def protocol_select_subprotocol( return try: - protocol.logger.error(connection.__dict__.get('request').headers - , exc_info=True) - protocol.logger.error(is_websocket(connection) - , exc_info=True) if is_websocket(connection): handler(connection) - else: - connection.close() except Exception: protocol.logger.error("connection handler failed", exc_info=True) connection.close(CloseCode.INTERNAL_ERROR)