diff --git a/ExtLibs/Xamarin/Xamarin/Linked/httpserver.cs b/ExtLibs/Xamarin/Xamarin/Linked/httpserver.cs index b0b0f192d9..0bfaaab69d 100644 --- a/ExtLibs/Xamarin/Xamarin/Linked/httpserver.cs +++ b/ExtLibs/Xamarin/Xamarin/Linked/httpserver.cs @@ -400,6 +400,16 @@ public void ProcessClient(object clientobj) ///////////////////////////////////////////////////////////////// else if (url.Contains(" /websocket/raw")) { + var remoteWsEp = client.Client.RemoteEndPoint as System.Net.IPEndPoint; + if (remoteWsEp == null || !IPAddress.IsLoopback(remoteWsEp.Address)) + { + string rejectHeader = "HTTP/1.1 403 Forbidden\r\n\r\nForbidden"; + byte[] rejectTemp = asciiEncoding.GetBytes(rejectHeader); + stream.Write(rejectTemp, 0, rejectTemp.Length); + stream.Close(); + return; + } + using (var writer = new StreamWriter(stream, Encoding.Default)) { writer.WriteLine("HTTP/1.1 101 WebSocket Protocol Handshake"); diff --git a/Utilities/httpserver.cs b/Utilities/httpserver.cs index 3a5db085f7..9c261a99cf 100644 --- a/Utilities/httpserver.cs +++ b/Utilities/httpserver.cs @@ -401,6 +401,16 @@ public void ProcessClient(object clientobj) ///////////////////////////////////////////////////////////////// else if (url.Contains(" /websocket/raw") || url.Contains(" / ") && head.Contains("Upgrade: websocket")) { + var remoteWsEp = client.Client.RemoteEndPoint as System.Net.IPEndPoint; + if (remoteWsEp == null || !IPAddress.IsLoopback(remoteWsEp.Address)) + { + string rejectHeader = "HTTP/1.1 403 Forbidden\r\n\r\nForbidden"; + byte[] rejectTemp = asciiEncoding.GetBytes(rejectHeader); + stream.Write(rejectTemp, 0, rejectTemp.Length); + stream.Close(); + return; + } + using (var writer = new StreamWriter(stream, Encoding.ASCII)) { writer.WriteLine("HTTP/1.1 101 WebSocket Protocol Handshake");