Мобильные браузеры отправляют файлы cookie httpOnly через HTML5 Audio-Tag?

Я пытаюсь воспроизвести некоторые mp3-файлы через аудио-тег html5. Для настольных компьютеров это прекрасно работает (с Chrome), но когда дело доходит до мобильных браузеров (также Chrome (для Android)), возникают некоторые трудности:

Я защитил поток с помощью некоторого пароля, поэтому потоковому серверу необходимо найти специальный файл cookie для аутентификации (весенняя защита, запомните меня). Но каким-то образом мобильный браузер не отправляет этот cookie, когда он получает доступ к mp3-потоку через аудиотег. Когда я ввожу поток URL прямо в адресную строку, все работает просто отлично.

Пока я искал потерянный файл cookie, я обнаружил, что мобильный браузер все еще отправляет некоторые файлы cookie (например, JSESSIONID), но не все. Дальнейшие исследования (быстрый PoC с PHP) показали, что мобильный браузер, похоже, отказывается отправлять куки через аудио-тег с установленным флагом HttpOnly. Итак, мой вопрос:

Является ли это определенным поведением, почему существуют различия между мобильной и настольной версиями (Chrome) и есть ли способ управления поведением со стороны клиента?

2 ответа

Посмотрев более подробно на HTTP-пакеты, я обнаружил, что браузер Android не запрашивает сам mp3-поток, а делегирует его на stagefright (некоторый мультимедийный клиент для Android). Быстрый поиск показал, что для старых версий Android (до 4.0) stagefright не может обрабатывать куки:

Мои собственные тесты подтвердили это. Старый stagefright (Android 2.3.x) вообще не отправляет куки, европейский S3 (android 4.1.2, stagefright 1.2) отправляет только куки, которые НЕ имеют флаг httpOnly.

Поэтому я думаю, что каждый должен сам решить, какое решение он хочет использовать:

  • включить httpOnly: Android не имеет никакого доступа, кроме его безопасного
  • отключить httpOnly: менее защищен от XSS, но работает для Android >4.0
  • отключить проверку подлинности на основе файлов cookie: небезопасно, но работает для всех

Примечание. Проблема с простым отключением httpOnly заключается в том, что все ваше приложение становится уязвимым для угонщиков файлов cookie. Другим возможным решением было бы иметь специальный cookie-файл Rememberme для потока (без httpOnly) и другой cookie-файл Rememberme с включенным httpOnly.

У меня была та же проблема, и отключение флагов HttpOnly или Secure на файлах cookie не решило проблему в браузере Chrome на Android 4.2 и 4.4.

Наконец я понял причину. У меня был cookie со значением, содержащим специальные символы двоеточие (:) и pipe ( |) и т. Д. После отключения этого cookie со специальными символами видео нормально воспроизводится в Android 4.2 и 4.4.

Надеюсь, это кому-нибудь поможет.

Другие вопросы по тегам