我试图通过HTML5音频标签玩一些MP3文件。 对于桌面这一伟大工程(含铬),但是当涉及到移动浏览器(也Chrome浏览器(Android版)),似乎有一些困难:
我与一些密码保护流中,因此流媒体服务器需要找到一个特别认证的cookie(春季安全的remember-me)。 但不知何故,当它访问通过音频标签的MP3流的移动浏览器不发送这个cookie。 当我直接进入视频流网址到地址栏的一切工作就好了。
虽然我搜索了失去的饼干,我发现,该手机浏览器仍然将一些饼干(如JSESSIONID),但不是全部。 进一步的调查(快速的PoC与PHP)透露,移动browsern似乎拒绝通过音频标签,因为他们的HttpOnly标志设置为发送cookie。 所以我的问题是:
这是指定的行为,为什么有移动和桌面版本(的铬)和之间的差异有没有办法控制来自客户端的行为?
通过查看更深入地进入HTTP包我发现,那Android的浏览器不要求MP3流本身,而是代表这怯场(某些Android多媒体客户端)。 快速搜索发现,对于老版本的Android(4.0前)怯场不能处理的Cookie:
- https://code.google.com/p/android/issues/detail?id=17553 < - (状态:垃圾邮件)WTF ...
- https://code.google.com/p/android/issues/detail?id=17281
- https://code.google.com/p/android/issues/detail?id=10567
- https://code.google.com/p/android/issues/detail?id=19958
我自己的测试证实了这一点。 老怯场(Android的2.3.x版本)不发送任何的cookies,从欧洲的S3的怯场(安卓4.1.2,怯场1.2)只发送不具有中HTTPOnly标志的饼干。
因此,我认为每个人都有权决定自己他要用哪种解决方案:
- 启用仅Http:Android有没有任何访问,但其安全
- 禁用仅Http:对XSS安全性较低,但工程为Android> 4.0
- 在所有禁用cookie认证:不安全但适用于所有
注:与简单地禁用的HttpOnly的问题是,你让你的整个应用程序容易受到饼干劫机者。 另一种可能的解决办法是有流(不仅Http)的特殊与rememberMe cookie,并与中HTTPOnly启用另一个与rememberMe饼干。
我有同样的问题和禁用的HttpOnly或安全标志的Cookie没有解决在Android 4.2和4.4 chrome浏览器的问题。
最后我想通了原因。 我曾与它包含特殊字符冒号值一个cookie(:)和管道(|)等禁用特殊字符的视频在Android 4.2和4.4播放罚款的cookie之后。
希望这可以帮助别人。