Python 网袋安全
我决定写一篇websocket聊天,他支持短信[无限字符数,不像Twitter:)]和文件传输。 问这个问题。如何制作平庸的身份识别数据?也就是说,当连接打开时,服务器只是一组字节,即使有json,也很容易替换:标记为“message”并发送混乱的文件(因为字符数不受限制,它将发送给所有用户)。 简而言之,就是如何辨别来自用户的信息 提前谢谢 不接受通过jquery传输文件,因为websocket不受保护 UPD 任何不理解问题本质的文章。解释:1。有一个关于龙卷风WS的聊天。2.在聊天室中,可以发送文字信息和文件。3.我用javascript控制它,但是如果有人建立连接并发送一个文件,例如,作为消息?客户端接收到大量“未知字节”。情况是这样的-{'msg':'Hello,world!!1'};{'file':文件}。一切都很好,但如果{'msg':一个文件},那就太可惜了。应该很清楚;) 欢迎来到SO 在我回答你的问题之前,请允许我澄清关于这个网站和我们社区的几点。这是你的第一个问题,也许你不知道:Python 网袋安全,python,web,websocket,chat,tornado,Python,Web,Websocket,Chat,Tornado,我决定写一篇websocket聊天,他支持短信[无限字符数,不像Twitter:)]和文件传输。 问这个问题。如何制作平庸的身份识别数据?也就是说,当连接打开时,服务器只是一组字节,即使有json,也很容易替换:标记为“message”并发送混乱的文件(因为字符数不受限制,它将发送给所有用户)。 简而言之,就是如何辨别来自用户的信息 提前谢谢 不接受通过jquery传输文件,因为websocket不受保护 UPD 任何不理解问题本质的文章。解释:1。有一个关于龙卷风WS的聊天。2.在聊天室中,可
至于Websocket安全性: 我不知道您使用的是哪种语言,所以我会用它来写,因为它对我来说更容易,而且我认为代码会更容易阅读 websocket以HTTP连接开始,然后“升级”为websocket连接 由于大多数应用程序已经有了为网站编写的HTTP安全/身份验证逻辑,因此最好对WebSocket使用相同的安全/身份验证逻辑 这通常在升级连接之前完成 诚然,有时人们会为websocket编写一个新的安全/身份验证逻辑层,但这并不是解决此问题的最有效方法(主要是因为在身份验证仍在处理时,消息可能会发送到websocket,这将开启一个新的问题和考虑的世界) 下面是一个使用的示例,它要求在升级之前进行身份验证。通过安装plezi gem(终端:
$[sudo]gem安装plezi
)并在irb(终端:$irb
)中运行以下代码来测试此示例:
需要“plezi”
类WebsocketSecDemo
#升级前调用pre_connect,但仍处于HTTP模式。
def预紧连接
#除非验证逻辑正常,否则返回false(拒绝连接)
除非验证逻辑,否则返回false
真的
结束
def on_消息数据
放入“got#{data}”
你自己试过什么吗?与我们分享。嗨!1.不允许用户建立多个连接(查看cookies)。但是这个选项是不安全的,获取开发人员控制台,您已经通过控制台建立了连接。数据的格式很容易伪造。2.关于文件有这样一个想法:用一个帧发送消息,对于相同片段的文件。因此,我可以区分这一点,但请看第一点,没有人能够避免伪造连接。3.是的,你当然可以限制字符的数量,但这也没什么帮助。你的问题到底是什么?这意味着什么:“如何制作平庸的身份识别数据?”这意味着什么:“简单地说,就是如何识别来自用户的信息?”。仅供参考,客户可以向webSocket发送他们想要的任何内容。在将数据传递给其他客户端之前,您的服务器必须准备好确保它获得的数据是预期的,并且是安全的。投票以“不清楚您在问什么”结束问题,因为问题不清楚,而且您在提问时没有澄清问题。您好@jfriend00,尽管您是对的,我们等一会儿怎么样。这是萨沙的第一个问题。很明显,英语不是Sasha的母语,问题提出才3个小时,你要求提供更多数据才1个小时——Sasha现在可能在不同的时区睡觉,现在无法回答你。。。让萨沙休息一下怎么样?我们曾经都是绿色的(我仍然觉得绿色)。谢谢你的回答!根据评论中的建议,我已经用细节更新了我的问题。查看此@Sasha,谢谢您提供更多详细信息。您能否单击问题标记列表下的编辑链接,并在问题中插入额外信息这将帮助其他没有阅读评论的人帮助你。此外,您还可以更新标记以添加Tornado和Python。完成!更改的问题和添加的标签)
require 'plezi'
class WebsocketSecDemo
# pre_connect is called before the upgrade, while still in HTTP mode.
def pre_connect
# return false (refuse the connection) unless the auth logic is okay
return false unless auth_logic
true
end
def on_message data
puts "got #{data}"
response << data
broadcast :ws_write, data
end
def index
"Check this using http://www.websocket.org/echo.html
\r\nConnect to the websocket at ws://localhost:3000/
\r\nTo authenticate, visit http://localhost:3000/login
\r\nTo un-authenticate visit http://localhost:3000/logout"
end
def login
cookies[:my_auth] = true
redirect_to :index
end
def logout
cookies[:my_auth] = nil
redirect_to :index
end
# protected methods aren't available to the HTTP router.
protected
def ws_write data
response << data
end
# The worst auth logic in the history of man kind...
def auth_logic
cookies[:my_auth] == true
end
end
Plezi.listen
Plezi.route '/', WebsocketSecDemo
# exit the terminal to start the demo
exit