2013-04-30 20 views
8

Tôi cố gắng phát một số tệp mp3 qua thẻ âm thanh html5. Đối với máy tính để bàn, nó hoạt động tốt (với Chrome), nhưng khi nói đến các trình duyệt di động (cũng Chrome (cho Android)), có vẻ như có một số khó khăn:Trình duyệt trên thiết bị di động có gửi cookie httpOnly qua Thẻ âm thanh HTML5 không?

Tôi đã bảo vệ luồng bằng một số mật khẩu máy chủ cần phải tìm một cookie xác thực đặc biệt (bảo mật mùa xuân nhớ-tôi). Nhưng bằng cách nào đó trình duyệt di động không gửi cookie này khi nó truy cập luồng mp3 thông qua thẻ âm thanh. Khi tôi nhập URL luồng trực tiếp vào thanh địa chỉ, mọi thứ đều hoạt động tốt.

Trong khi tôi tìm kiếm cookie bị mất mà tôi phát hiện ra, trình duyệt trên thiết bị di động vẫn gửi một số cookie (ví dụ: JSESSIONID) nhưng không phải tất cả. Các điều tra thêm (PoC nhanh với PHP) cho thấy rằng trình duyệt di động dường như từ chối gửi cookie thông qua thẻ âm thanh có bộ cờ HttpOnly. Vì vậy, câu hỏi của tôi là:

Đây có phải là hành vi được chỉ định không, tại sao có sự khác biệt giữa phiên bản dành cho thiết bị di động và máy tính để bàn (Chrome) và có cách nào kiểm soát hành vi từ phía khách hàng không?

Trả lời

10

Bằng cách tìm hiểu sâu hơn về các gói HTTP tôi phát hiện ra, trình duyệt Android không yêu cầu chính dòng mp3, nhưng ủy quyền này cho stagefright (một số ứng dụng đa phương tiện android). Một tìm kiếm nhanh chóng tiết lộ, rằng đối với các phiên bản Android cũ (trước 4.0) stagefright không thể xử lý các tập tin cookie:

Bài kiểm tra của riêng tôi đã xác nhận điều này. Stagefright cũ (Android 2.3.x) không gửi bất kỳ cookie nào cả, stagefright từ S3 châu Âu (android 4.1.2, stagefright 1.2) chỉ gửi các cookie KHÔNG có cờ httpOnly.

Vì vậy, tôi nghĩ rằng tất cả mọi người phải quyết định mình mà giải pháp, ông muốn sử dụng:

  • phép HttpOnly: android không có quyền truy cập vào tất cả nhưng nó an toàn
  • vô hiệu hóa HttpOnly: kém an toàn chống lại XSS, nhưng làm việc cho Android> 4,0
  • vô hiệu hóa xác thực Cookie tại tất cả: không an toàn nhưng làm việc cho tất cả

Lưu ý: vấn đề với chỉ đơn giản là vô hiệu hóa HttpOnly là bạn thực hiện wh của bạn ole ứng dụng dễ bị tấn công bởi kẻ xâm nhập cookie. Một giải pháp khác có thể là có một cookie đặc biệt cho dòng suối (không có httpOnly) và một cookie Rememberme khác đã được kích hoạt httpOnly.

+0

Sự cố này đã được báo cáo cho android: https://code.google.com/p/android/issues/detail?id=17553 mặc dù nó đã bị đánh dấu là 'spam'. Tôi có thể mở lại vấn đề vì tôi không hiểu độ phân giải 'spam'. –

+0

Các vấn đề khác cần xem: https://code.google.com/p/android/issues/detail?id=66050, https://code.google.com/p/chromium/issues/detail?id=163796 –

+0

Có thể cùng một vấn đề khi nhúng/phát trực tuyến video bằng cách sử dụng xác thực PHP và cookie/phiên, xem http://stackoverflow.com/q/32181185/1066234 –

0

Tôi đã gặp vấn đề tương tự và vô hiệu cờ HttpOnly hoặc Secure trên cookie không giải quyết được sự cố trên trình duyệt Chrome Android 4.2 và 4.4.

Cuối cùng tôi đã tìm ra nguyên nhân. Tôi đã có một cookie với giá trị của nó có chứa các ký tự đặc biệt colon (:) và pipe (|), vv. Sau khi vô hiệu hóa cookie đó với các ký tự đặc biệt, video sẽ chạy tốt trong Android 4.2 và 4.4.

Hy vọng điều này sẽ giúp ai đó.