2010-08-04 41 views
7

Tôi đang tạo ứng dụng truyền thông xã hội trong Flash (AS3) được tích hợp chặt chẽ với Facebook - tất cả tài khoản người dùng được xử lý qua kết nối Facebook và tất cả kết nối Facebook được xử lý thông qua kết hợp các API JavascriptAS3 Facebook. Tôi đang sử dụng Codeigniter trên chương trình phụ trợ cho quản lý dữ liệu phía máy chủ, bao gồm theo dõi hành động và dữ liệu của người dùng trên trang web thông qua URLRequests từ Flash.Thực hiện xác thực Facebook: Phía máy khách và phía máy chủ

Vấn đề của tôi là tôi không biết cách ngăn chặn giả mạo các yêu cầu máy chủ được tạo từ Flash; về mặt lý thuyết, người dùng độc hại có thể theo dõi các cuộc gọi mà Flash đang tạo cho máy chủ của tôi và sao chép chúng theo cách (ví dụ) chèn dữ liệu rác và liên kết nó với một ID người dùng Facebook đã cho trong cơ sở dữ liệu của tôi. Tất cả xác thực được thực hiện ở phía máy khách (thông qua Facebook JS API) mà không có sự can thiệp của máy chủ, vì vậy tôi đang gặp khó khăn trong việc tìm ra cách bảo mật cuộc gọi giữa Flash và máy chủ theo cách đảm bảo người dùng phải được xác thực với Facebook để tạo ra chúng.

Một khả năng tôi xem là đang sử dụng lược đồ mã hóa được khách hàng và máy chủ biết để chuyển qua lại UID Facebook, điều này chắc chắn sẽ tốt hơn là chuyển chúng đi rõ ràng. Tuy nhiên, nó sẽ chỉ mất một hacker đáng tin cậy với đủ thời gian/kiên nhẫn để phá vỡ các chương trình (hoặc dịch ngược swf) để vít tất cả mọi thứ lên.

Dù sao đi nữa, tôi có thể bị đánh giá quá mức, nhưng có vẻ như đây là điểm quan trọng và tôi thực sự không chắc chắn về cách tiếp cận tốt nhất. Bất kì phản hồi nào cũng sẽ được đánh giá cao!

Trả lời

1

Đây là mối quan tâm chính đáng vì bạn vi phạm CWE-603: Use of Client-Side Authentication. Mã hóa không thể giúp trạm này vì một khách hàng độc hại sẽ có thể nhận được bất kỳ bí mật nào.

Cách tiếp cận tốt nhất để xác minh ứng dụng khách là yêu cầu ứng dụng flash gửi information about the session quay lại máy chủ. Máy chủ sau đó phải kết nối lại với facebook bằng cách sử dụng một cái gì đó giống như php api sao cho máy chủ có thể xác minh rằng máy khách có phiên hợp lệ với facebook. Điều này nên được thực hiện một lần cho mỗi lần đăng nhập và sau đó bạn có thể phát hành id phiên (cookie) cho ứng dụng flash để truy cập kho dữ liệu của bạn cho người dùng đó.

+0

Rook, bạn đang đề cập đến mã thông báo truy cập là thông tin về phiên có sẵn cho khách hàng và máy chủ có thể sử dụng thông tin này để kết nối với FB không? – Totach

+0

Để cho bạn biết, liên kết wiki.developers.facebook của bạn bị hỏng. Tham khảo: meta.stackoverflow.com/q/101241/149820 – staticbeast

+0

Điều này không đúng. Mặc dù đó là một cách để thực hiện điều này, nhưng hiệu quả hơn là sử dụng cookie được thiết lập bởi libs của máy khách (javascript). – MetaChrome

6

Tôi đã dành rất nhiều thời gian để tìm hiểu điều này! Tôi biết đây là một câu hỏi cũ, nhưng hy vọng nó sẽ hữu ích cho bạn hoặc ít nhất là một người khác.

Vấn đề cơ bản giống như bạn đã nói. Nếu bạn đang thực hiện xác thực phía máy khách, nhưng bạn muốn thực hiện một số thao tác phía máy chủ người dùng cụ thể, bạn cũng cần bảo mật xác thực người dùng trên hệ thống của mình. Lý tưởng nhất, bạn sẽ muốn tránh việc họ đăng nhập lại với một mật khẩu và như vậy bởi vì đó sẽ là một trải nghiệm người dùng khủng khiếp. Vì vậy, người ta có thể bị cám dỗ chỉ cần gửi qua UID và đăng nhập chúng theo cách đó. Thật không may, có một nguy cơ bảo mật rõ ràng cho điều này. Như bạn chỉ ra, bất cứ ai cũng có thể vượt qua UID, đó là kiến ​​thức chung và đăng nhập với tư cách là một người không phải là họ.

Giải pháp cho vấn đề này là sử dụng thông tin được lưu trữ trong cookie mà api facebook giảm sau khi người dùng đăng nhập thành công. Thông tin trong cookie chứa thông tin người dùng trong đó cũng như dữ liệu chữ ký duy nhất. Nếu máy chủ lấy nội dung của cookie, và bạn xử lý nó một cách chính xác, thì nên bật một mã bí mật. Mã bí mật này phải khớp, chính xác, mã bí mật ứng dụng của bạn mà chỉ bạn và facebook mới biết. Nếu có, thì bạn biết cookie (và do đó người dùng) là hợp pháp. Nếu nó không giống nhau, thì bạn biết ai đó đang thử cái gì đó buồn cười.

Để biết thêm thông tin, bạn có thể xem xét kiểm tra ra các trang này: PHP - https://developers.facebook.com/docs/guides/web/#personalization Ruby - http://vombat.tumblr.com/post/835536630/ruby-version-of-facebooks-get-facebook-cookie-in-php

Tôi cũng nên lưu ý rằng cách tiếp cận tương tự cho cả LinkedIn và Twitter tồn tại.

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