2012-01-25 35 views
11

Giả sử ứng dụng của tôi có mã thông báo truy cập cho một số người dùng facebook. Có nguy cơ bảo mật khi hiển thị mã thông báo truy cập này trong Mã JS cho một số người dùng khác truy cập trang web của tôi không? Nếu vậy, họ có thể làm gì với nó?Rủi ro bảo mật trong việc phơi bày token truy cập người dùng facebook trong javascript là gì?

+1

security.stackexchange.com cũng có thể là diễn đàn tốt cho câu hỏi này. –

Trả lời

9

Mã thông báo truy cập Facebook cung cấp các quyền giống như ứng dụng của bạn cho một người dùng cụ thể cho bất kỳ ai có quyền truy cập vào mã thông báo. Vì vậy, nếu ứng dụng của bạn có quyền thực hiện các hành động A, B và C và được cấp một mã thông báo cho hiệu ứng đó, bất kỳ ứng dụng nào khác có thể lấy mã thông báo sẽ có cùng quyền đối với người dùng đó (cho đến khi mã thông báo hết hạn).

Vì vậy, có, có rủi ro. Bạn cần phải bảo vệ mã thông báo khỏi quyền truy cập vào bất kỳ ai/bất kỳ thứ gì không có quyền giống với người dùng Facebook như ứng dụng của bạn.

+3

Nhưng việc sử dụng mã thông báo truy cập bị hạn chế đối với miền ứng dụng. Vì vậy, có vẻ như ứng dụng khác sẽ không thể sử dụng nó. – Andy

+2

Ứng dụng của bạn có mã thông báo truy cập cho Facebook, theo ví dụ của bạn. Điều đó có nghĩa là nó có quyền thực hiện các hành động A, B và C trên Facebook. Bất kỳ ai lấy mã thông báo đó giờ đây đều có các quyền tương tự để thực hiện các hành động A, B và C trên Facebook với tư cách là người dùng được đề cập. Miền ứng dụng ngăn các ứng dụng khác chấp nhận mã thông báo nhưng Facebook sẽ vui vẻ chấp nhận nó, bất kể ai đang gửi. Đây là lý do tại sao mã thông báo OAuth phải được bảo vệ và tồn tại trong thời gian ngắn. Bản nháp Internet của IETF trên OAuth 2.0 Bearer Tokens nên giải thích chi tiết này: http://self-issued.info/docs/draft-ietf-oauth-v2-bearer.html – jeffsix

+0

tôi đã hiểu. nhưng ... tôi đang sử dụng một ứng dụng cho mục đích của riêng tôi và không có người dùng nào khác tham gia vào nó. tôi muốn đọc ý kiến ​​được đăng cho bài viết của tôi bằng cách sử dụng cron. vì vậy tôi đã tạo một mã thông báo truy cập lâu dài vào ngày này là 60 ngày. tôi chắc chắn nó được sử dụng trong kịch bản phía máy chủ. tôi sẽ phải lưu trữ nó trong một tập tin db hoặc phẳng. sự cho phép tôi đặt thành đó chỉ là offline_access. nếu mã thông báo truy cập này được công khai thì tất cả các hành động có thể có trên mã thông báo truy cập đó là gì? nói cách khác làm thế nào để tôi hạn chế đó để đọc chỉ có ý kiến ​​và không phải bất kỳ hoạt động khác? hy vọng tôi đã làm cho nó rõ ràng? –

13

Bạn đang có nguy cơ bị

  1. Confused deputy - mã của bạn được cấp quyền để mã mà có thể lợi dụng những đặc quyền hoặc cố ý hoặc bởi đại diện cho mã chưa nhiều đó là độc hại.
  2. Trộm qua code injection (XSS) - thông tin đăng nhập có thể bị đánh cắp bằng mã được chèn vào trang của bạn thông qua lỗ hổng XSS và sau đó được sử dụng để hành động thay mặt người dùng, có thể tạo nhật ký truy tố bạn là thủ phạm.
  3. Trộm cắp thông qua nghe lén - nếu có nội dung không phải HTTPS vượt qua kết nối giữa trình duyệt và máy chủ của bạn, thì người nghe trộm có khả năng đọc gói có thể lấy cắp thông tin đăng nhập.
  4. Trộm cắp phần mềm độc hại - nếu có phần mềm độc hại đang chạy trên máy tính của người dùng, thì việc gửi các thông tin đăng nhập đó đến trình duyệt sẽ hiển thị chúng cho phần mềm độc hại đó. Các phần mềm độc hại có thể sẽ phải đọc bộ nhớ thuộc sở hữu của quá trình trình duyệt hoặc các tập tin bộ nhớ cache được viết bởi trình duyệt.
+0

Mã truy cập không giới hạn trong miền? –

+1

về số 4 ... nếu có phần mềm độc hại thì người dùng đã gặp sự cố và việc gửi mã thông báo truy cập không được tạo ra một mức độ bảo mật nào khác, phải không? Bởi vì nếu phần mềm độc hại có thể kiểm soát và truy cập trình duyệt thì nó chỉ có thể truy cập trang web và đọc nội dung riêng tư .. –

+0

@MuhammadUmer, no. Nếu trang web gửi thông tin xác thực C tới trình duyệt đang chạy trên máy đó để trả lời thông tin đăng nhập bằng thông tin đăng nhập D, thì phần mềm độc hại trên máy đó có quyền truy cập vào cả thông tin đăng nhập C và D. Nhưng nếu trang web đó không gửi C tới trình duyệt, máy chỉ có quyền truy cập vào thông tin đăng nhập D. Sự khác biệt là D kết hợp với các mã thông báo XSRF ngắn ngủi có thể ngụ ý C nội bộ, nhưng nếu C được gửi đi, bây giờ phần mềm độc hại có cửa sổ rộng để lạm dụng C. –

3

Mã thông báo truy cập đó có thể được bất kỳ ai sử dụng ở bất kỳ đâu để thực hiện bất kỳ điều gì mà mã thông báo truy cập có quyền. Đó là những gì làm cho nó mạnh mẽ, phải không?

Vì vậy, việc hiển thị access_token trong javascript thực sự phụ thuộc vào nơi mà javascript đang được chạy và qua loại mạng truy cập mã thông báo nào đang được gửi.

Nếu mọi thứ trên https, bạn không phải lo lắng nếu thiết bị javascript đang chạy được bảo mật (nói trình duyệt của điện thoại di động có khóa màn hình).

Nếu thiết bị nói một thiết bị đầu cuối internet chung, ngay cả với https, nơi mọi người sử dụng cùng một tài khoản người dùng, sau đó nếu một kẻ lừa đảo sử dụng các tệp lịch sử trên trình duyệt và rút ra mã thông báo truy cập đó. Tệ tệ tệ.

Nếu liên lạc qua http, thì mở rộng ra toàn thế giới để xem. Tệ tệ tệ.

Vì bạn chưa cung cấp cho chúng tôi bất kỳ thông tin nào về môi trường, đó là một câu hỏi khá mơ hồ. Vì vậy, dòng dưới cùng của tôi sẽ không quá mơ hồ. Đừng làm điều đó! Chỉ cần để SDK Javascript của Facebook xử lý access_token cho bạn.Mã

2

Tiết lộ bảo mật có thể làm cho người dùng của bạn dễ bị mắc Hack

Tôi nhớ một phần mềm "FaceNiff" chạy trên điện thoại Android rooted, Nó ngửi thẻ bảo mật của facebook và các trang web khác và bạn có thể đăng nhập bằng tài khoản của bất kỳ người dùng nào được kết nối với WIFI đó.

Đã xảy ra lỗ hổng bảo mật trong phần mềm Android khác cho phép tin tặc đánh cắp mã bảo mật lịch gmail của bạn và có thể truy cập đầy đủ.

Đọc bài đăng này http://www.techlicious.com/blog/android-security-flaw-could-expose-you-to-data-theft/

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