移动浏览器是否通过HTML5音频标签发送httpOnly cookie?

时间:2013-04-30 23:27:32

标签: html5-audio mobile-browser cookie-httponly

我尝试通过html5音频标签播放一些mp3文件。对于桌面而言,这非常适合(使用Chrome),但是当涉及到移动浏览器(也是Chrome(适用于Android))时,似乎存在一些困难:

我用一些密码保护了流,因此流媒体服务器需要找到一个特殊的身份验证cookie(spring security remember-me)。但不知何故,移动浏览器在通过音频标签访问mp3流时不会发送此cookie。当我将流URL直接输入地址栏时,一切正常。

当我搜索我发现的丢失的cookie时,移动浏览器仍然发送一些cookie(例如JSESSIONID)但不是全部。进一步调查(使用PHP的快速PoC)显示移动浏览器似乎拒绝通过具有HttpOnly Flag设置的audio-tag发送cookie。所以我的问题是:

这是一个指定的行为,为什么移动版和桌面版(Chrome版)之间存在差异,是否有办法控制客户端的行为?

2 个答案:

答案 0 :(得分:10)

通过深入研究我发现的HTTP软件包,Android浏览器不会请求mp3流本身,而是将其委托给stagefright(一些Android多媒体客户端)。快速搜索显示,对于旧的Android版本(4.0之前),stagefright无法处理cookie:

我自己的测试证实了这一点。旧的stagefright(Android 2.3.x)根本不发送任何cookie,来自欧洲S3(android 4.1.2,stagefright 1.2)的stagefright只发送没有httpOnly标志的cookie。

所以我认为每个人都必须自己决定使用哪种解决方案:

  • 启用httpOnly:除了安全
  • 之外,android根本没有访问权限
  • 禁用httpOnly:针对XSS的安全性较低,但适用于Android> 4.0
  • 根本禁用cookie身份验证:不安全但适用于所有

注意:简单地禁用httpOnly的问题在于,您使整个应用程序容易受到cookie劫持者的攻击。另一个可能的解决方案是为流提供一个特殊的记忆cookie(没有httpOnly)和另一个启用了httpOnly的记忆cookie。

答案 1 :(得分:0)

我遇到了同样的问题,在Cookie上禁用HttpOnly或Secure标记并没有解决Android 4.2和4.4 Chrome浏览器上的问题。

最后我想出了原因。我有一个cookie,其值包含特殊字符冒号(:)和管道(|)等。禁用具有特殊字符的cookie后,视频在Android 4.2和4.4中播放正常。

希望这有助于某人。