2013-12-14 64 views
3

当使用wss://时,URL本身是否也被加密?例如,假设你有一个接受的网络套接字连接的简单西纳特拉Web应用程序:Web Socket安全URL加密

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

是在URL中user.api_key加密或为它容易受到攻击?

回答

1

是的,URL将被加密。安全的网络套接字使用传输层安全(就像HTTPS一样)通过安全连接传输所有数据。见section 4 of RFC 6455

如果/安全/是真实的,客户端必须在打开连接后并发送 握手数据之前 连接进行TLS握手。 [...]此通道上的所有进一步通信必须通过加密通道运行。

+0

感谢您的澄清。我不确定通过'wss:// URL'传递'api_key'是否可以安全地传输这些信息。似乎不可能通过网络套接字使用查询参数(例如'?api_key = VALUE')或标题(例如'x-api-key:VALUE')。 –