2013-04-28 36 views
8

Tôi đang xây dựng một ứng dụng đang sử dụng ổ cắm web. Tôi chỉ cho phép người dùng được xác thực mở một kết nối websocket với máy chủ sau khi họ đã đăng nhập và đã được cấp một id phiên.Các vấn đề bảo mật xung quanh kết nối websocket mở là gì?

  1. Khi tôi đã mở kết nối websocket với người dùng đã xác thực, "trang" hiện tại sau đó giữ chi tiết về kết nối websocket mở. Tại thời điểm này, kết nối này có tương đối an toàn không? Hoặc tôi có nên thực sự kiểm tra một số mã thông báo trên mỗi thư trong giao thức cấp ứng dụng của riêng tôi có trong websocket không?

  2. Có bất kỳ sự cố bảo mật loại giả mạo nào được biết đến không? Trường hợp ai đó có thể coop một websocket mở bằng cách nhận được người dùng xác thực để thực hiện một số javascript một cách nào đó - dẫn đến khả năng khai thác các kết nối websocket mở?

Trả lời

4

1) Kết nối an toàn khi bạn đặt an toàn ở phía máy chủ. Vì vậy, bạn phải gửi ID phiên thông qua WebSockets, xác minh ở phía máy chủ là đúng và đánh dấu kết nối là hợp lệ. Xác thực là khó khăn hơn với HTTP, bởi vì HTTP là không trạng thái (không giống như TCP nguyên). Tất nhiên nó vẫn có thể cướp kết nối TCP, nhưng nó không phải là dễ dàng (xem ví dụ this article) và nếu nó xảy ra, sau đó không có gì (trừ TLS) có thể giúp bạn.

2) Vâng, nếu bạn quấn kết nối WebSocket của bạn với một chức năng ẩn danh như thế:

(function() { 
    var ws = new WebSocket("ws://localhost:1000"); 
    // some other stuff 
})(); 

thì không có bên ngoài JavaScript sẽ có thể truy cập vào nó, vì vậy bạn không cần phải lo lắng về điều đó.

+1

Đối với # 1 ở trên - có Tôi đang kiểm tra cookie trong cái bắt tay ban đầu vì đó là yêu cầu HTTP GET để thiết lập kết nối. Cookie phải có id phiên hợp lệ thông qua xác thực trước đó. Vì vậy, tôi an toàn cấp kết nối ... nó chỉ không rõ ràng những gì lỗ hổng có thể tồn tại bây giờ với kết nối này đang mở và không xác thực tất cả các tin nhắn ... – Rocketman

Các vấn đề liên quan