2013-12-14 66 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')。 –