打开websocket时,出现龙卷风403 GET警告



我找到了这个python脚本,它应该允许我打开WebSocket。但是,当尝试打开实际的WebSocket(使用旧的WebSocket终端Chrome插件)时,我在Linux终端中收到警告[W 1402720 14:44:35 web:1811] 403 GET / (192.168.0.102) 11.02 ms。"连接打开"、"连接关闭"one_answers"收到消息"这些信息在终端窗口中永远不会打印出来。

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import tornado.websocket
class MyHandler(tornado.websocket.WebSocketHandler):
        def open(self):
                print "connection opened"
                self.write_message("connection opened")
        def on_close(self):
                print "connection closed"
        def on_message(self,message):
                print "Message received: {}".format(message)
                self.write_message("message received")
if __name__ == "__main__":
        tornado.options.parse_command_line()
        app = tornado.web.Application(handlers=[(r"/",MyHandler)])
        server = tornado.httpserver.HTTPServer(app)
        server.listen(8888)
        tornado.ioloop.IOLoop.instance().start()

请添加

def check_origin(self, origin):
    return True

在MyHandler类中像这样

class MyHandler(tornado.websocket.WebSocketHandler):
    def check_origin(self, origin):
        return True
    def open(self):
        print "connection opened"
        self.write_message("connection opened")
    def on_close(self):
        print "connection closed"
    def on_message(self,message):
        print "Message received: {}".format(message)
        self.write_message("message received")

From the DOCs:

默认情况下,[check_origin]拒绝所有来自主机的请求这一个。

这是针对跨站点脚本攻击的安全保护浏览器,因为WebSockets允许绕过通常的同源策略,不要使用CORS头。

:

这是一个重要的安全措施;不要禁用它理解安全含义。特别是,如果你身份验证是基于cookie的,您必须限制源或者实现您自己的类似xsrf的保护对于websocket连接。

链接。

不要因为check_origin()是安全威胁而将return True设置为,而是使用允许的域列表,即:

def check_origin(self, origin):
    allowed = ["https://site1.tld", "https://site2.tld"]
    if origin in allowed:
        print("allowed", origin)
        return 1

稍微修改了@maxhawkdown的解决方案。

from tornado.util import PY3
if PY3:
    from urllib.parse import urlparse  # py2
    xrange = range
else:
    from urlparse import urlparse  # py3

class ChatHandler(tornado.websocket.WebSocketHandler):
    CORS_ORIGINS = ['localhost']
    def check_origin(self, origin):
        parsed_origin = urlparse(origin)
        # parsed_origin.netloc.lower() gives localhost:3333
        return parsed_origin.hostname in self.CORS_ORIGINS

相关内容

  • 没有找到相关文章

最新更新