使用wss://
时,网址本身是否也已加密?例如,假设您有一个简单的Sinatra Web应用程序,它接受Web套接字连接:
class App < Sinatra::Base
get "/ws/:api_key/room/:id" do |api_key, id|
user = User.find_by(api_key: api_key)
room = Room.find(id)
if RoomAuthenticator.new(room).authorized?(user)
request.websocket do |ws|
ws.onopen { publish(room, "#{user.name} connected.") }
end
else
401
end
end
end
然后从客户端/浏览器中,在JavaScript中:
new WebSocket("wss://" + window.location.host + "/ws/" + user.api_key + "/room/" + room.id);
网址中的user.api_key
是否已加密或是否容易受到攻击?
答案 0 :(得分:1)
是的,URL将被加密。安全Web套接字使用传输层安全性(就像HTTPS一样)来通过安全连接隧道传输所有数据。见section 4 of RFC 6455:
如果/ secure /为true,客户端务必执行TLS握手 打开连接后和发送之前的连接 握手数据。 [...]此频道上的所有进一步通信必须通过加密隧道。