Bladeren bron

websocket client "magic" key should be random

Fixes #1220
bel2125 1 jaar geleden
bovenliggende
commit
19b70adc70
3 gewijzigde bestanden met toevoegingen van 22 en 2 verwijderingen
  1. 1 0
      CREDITS.md
  2. 20 1
      src/civetweb.c
  3. 1 1
      unittest/public_server.c

+ 1 - 0
CREDITS.md

@@ -225,6 +225,7 @@
 * Torben Jonas
 * Uilian Ries
 * Ulrich Hertlein
+* videofan3d
 * Walt Steverson
 * wangli28
 * webxer

+ 20 - 1
src/civetweb.c

@@ -19243,6 +19243,24 @@ websocket_client_thread(void *data)
 #endif
 
 
+#if defined(USE_WEBSOCKET)
+static void
+generate_websocket_magic(char *magic25)
+{
+	uint64_t rnd;
+	unsigned char buffer[2 * sizeof(rnd)];
+
+	rnd = get_random();
+	memcpy(buffer, &rnd, sizeof(rnd));
+	rnd = get_random();
+	memcpy(buffer + sizeof(rnd), &rnd, sizeof(rnd));
+
+	size_t dst_len = 24 + 1;
+	mg_base64_encode(buffer, sizeof(buffer), magic25, &dst_len);
+}
+#endif
+
+
 static struct mg_connection *
 mg_connect_websocket_client_impl(const struct mg_client_options *client_options,
                                  int use_ssl,
@@ -19259,7 +19277,8 @@ mg_connect_websocket_client_impl(const struct mg_client_options *client_options,
 
 #if defined(USE_WEBSOCKET)
 	struct websocket_client_thread_data *thread_data;
-	static const char *magic = "x3JJHMbDL1EzLkh9GBhXDw==";
+	char magic[32];
+	generate_websocket_magic(magic);
 
 	const char *host = client_options->host;
 	int i;

+ 1 - 1
unittest/public_server.c

@@ -1316,7 +1316,7 @@ START_TEST(test_request_handlers)
 	char cmd_buf[1024];
 	char *cgi_env_opt;
 
-	const char *server_host = "test.domain";
+	const char *server_host = "localhost"; //"test.domain";
 
 	mark_point();