2011-12-01 29 views
18

Kịch bản ví dụ: Ứng dụng trò chuyện nhiều người dùng dựa trên web thông qua kết nối websocket. Làm thế nào tôi có thể đảm bảo (hoặc đảm bảo) rằng mỗi kết nối trong ứng dụng này thuộc về một số người dùng đã được xác thực và "không thể" bị mạo danh giả mạo hoặc can thiệp trong quá trình kết nối.Có thể nào để xác thực người dùng khi kết nối websocket được sử dụng?

bằng cách tôi đang sử dụng websocket cơn lốc xoáy ở phía máy chủ để triển khai phòng trò chuyện cơ bản và đã thực hiện xác thực cho phần không phải websocket của ứng dụng của tôi.

ps: giả sử người dùng đã xác thực đăng những gì anh ta muốn và khi người dùng khác mở trang danh sách mục và người dùng khác tự động được thêm vào danh sách người nghe websocket những gì tôi muốn mỗi người dùng có thể trò chuyện với người mua của mục riêng lẻ không có trong một cách chatroom nhưng với một để trò chuyện

+0

Trình trang trí @ tornado.web.authenticated có hoạt động với các phương thức của tornado.websocket.WebSocketHandler không? – hymloth

+0

Nó có thể nhưng như tôi đã nói người dùng đã được xác thực khi nói đến một phần websocket của ứng dụng và tôi có tất cả các trình nghe websocket trong một danh sách –

+0

là trò chuyện StackOverflow sử dụng Websockets? – emaillenin

Trả lời

15

Trước hết, có hai điều bạn nên nhớ về WebSockets: (a) nó là một tiêu chuẩn phát triển và (b) nó được thiết kế với ý định làm việc với khách hàng không tin cậy.

Điều lớn nhất và quan trọng nhất bạn nên luôn làm với WebSockets là kiểm tra nguồn gốc của chúng. Nếu nguồn gốc không khớp, rõ ràng là bạn không muốn đối phó với khách hàng đó, vì vậy hãy bỏ qua các yêu cầu của họ. Ngoài ra, hãy đảm bảo rằng bạn đang sử dụng giao thức WebSocket được bảo mật "wss" thay vì giao thức không an toàn "ws". Điều này sẽ đảm bảo rằng thư của bạn được mã hóa.

Vấn đề với việc thực hiện điều này, là thông tin này có thể bị giả mạo. Xem this blog post để xem minh họa nhanh về điều này.

an ninh bổ sung:

  • Hãy thử gửi một mã thông báo muối, có nó muối/băm và gửi trả lại và xác nhận trong giai đoạn bắt tay.
  • Yêu cầu giới hạn xảy ra quá thường xuyên (giống như giao thức IRC). Nếu người dùng đã gửi 10 dòng trở lên trong khoảng thời gian một giây, hãy bỏ qua người dùng đó.
  • Thực hiện kiểm tra spam nhanh (có rất nhiều thuật toán cho điều này) - gắn với chẩn đoán ánh sáng, nếu không nó sẽ gây gánh nặng cho máy chủ của bạn. Những thứ như sự hiện diện của các từ "miễn phí" hoặc "viagra". Cung cấp cho người dùng một số điểm đại diện cho khả năng họ đang gửi spam hoặc là bot. Khi đó là vi phạm, khởi động chúng từ các máy chủ.

Hy vọng điều đó sẽ hữu ích! Xin lỗi nếu nó không. Đây là câu trả lời của tôi frist trên StackOverflow. : P

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