Rev3868, Add origin validation to websocket connections
This commit is contained in:
parent
77a5d88ec9
commit
67b78ca12d
2 changed files with 12 additions and 2 deletions
|
@ -13,7 +13,7 @@ class Config(object):
|
||||||
|
|
||||||
def __init__(self, argv):
|
def __init__(self, argv):
|
||||||
self.version = "0.6.5"
|
self.version = "0.6.5"
|
||||||
self.rev = 3866
|
self.rev = 3868
|
||||||
self.argv = argv
|
self.argv = argv
|
||||||
self.action = None
|
self.action = None
|
||||||
self.pending_changes = {}
|
self.pending_changes = {}
|
||||||
|
|
|
@ -710,9 +710,19 @@ class UiRequest(object):
|
||||||
# On websocket connection
|
# On websocket connection
|
||||||
def actionWebsocket(self):
|
def actionWebsocket(self):
|
||||||
ws = self.env.get("wsgi.websocket")
|
ws = self.env.get("wsgi.websocket")
|
||||||
|
|
||||||
if ws:
|
if ws:
|
||||||
wrapper_key = self.get["wrapper_key"]
|
# Allow only same-origin websocket requests
|
||||||
|
origin = self.env.get("HTTP_ORIGIN")
|
||||||
|
host = self.env.get("HTTP_HOST")
|
||||||
|
if origin and host:
|
||||||
|
origin_host = origin.split("://", 1)[-1]
|
||||||
|
if host != origin_host:
|
||||||
|
ws.send(json.dumps({"error": "Invalid origin: %s" % origin}))
|
||||||
|
return self.error403("Invalid origin: %s" % origin)
|
||||||
|
|
||||||
# Find site by wrapper_key
|
# Find site by wrapper_key
|
||||||
|
wrapper_key = self.get["wrapper_key"]
|
||||||
site = None
|
site = None
|
||||||
for site_check in self.server.sites.values():
|
for site_check in self.server.sites.values():
|
||||||
if site_check.settings["wrapper_key"] == wrapper_key:
|
if site_check.settings["wrapper_key"] == wrapper_key:
|
||||||
|
|
Loading…
Reference in a new issue