python代码写龙卷风_python-打开网站时龙卷风403获取警告

python-打开网站时龙卷风403获取警告

我找到了这个Python脚本,应该可以打开WebSocket。但是,尝试打开实际的WebSocket(使用Old WebSocket Terminal Chrome插件)时,我在Linux终端中收到警告[W 1402720 14:44:35 web:1811] 403 GET / (192.168.0.102) 11.02 ms。 消息“连接已打开”,“连接已关闭”和“消息已接收”永远不会在终端窗口中打印。

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()

3个解决方案

98 votes

请加

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")

从DOC:

默认情况下,[check_origin]拒绝源于主机以外的主机的所有请求 这个。

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

然后再次:

这是一项重要的安全措施。 没有它就不要禁用它 了解安全隐患。 特别是如果您 身份验证是基于Cookie的,您必须限制来源 由check_origin()允许或实施您自己的类似XSRF的保护 用于websocket连接。 有关更多信息,请参见这些文章。

链接。

maxhawkdown answered 2020-07-18T00:16:09Z

1 votes

略微修改了@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

guneysus answered 2020-07-18T00:16:29Z

1 votes

不要将return True设置在check_origin()上,因为这是一种安全威胁,请改用允许的域列表,即:

def check_origin(self, origin):

allowed = ["https://site1.tld", "https://site2.tld"]

if origin in allowed:

print("allowed", origin)

return 1

Pedro Lobito answered 2020-07-18T00:16:49Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值