文章标签 » wap

消灭referer

看到一篇《浅谈WAP网站安全》的文章。里面讲到通过URL的referer获取用户的登录session。
简单描述一下:
例如有个WAP页面: http://abc.com/link.php?sid=xxxxxx,sid为用户登录后的session ID,页面中有链接到http://efg.com的A标签。

当用户点击链接访问http://efg.com时,efg.com的服务器log里就会有类似
xxx.xxx.xxx.xxx – – [17/Jan/2011:13:29:14 +0800] “GET / HTTP/1.0” 302 20 “http://abc.com/link.php?sid=xxxxxx” “Firefox”
的记录,无疑efg.com就可以得到该用户的在abc.com的登录session

疑问:abc.com傻b吗?不会把sid存到cookie里吗?

全是中国移动的错,虽然现在几乎所有的手机浏览器都支持cookie,但是如果用户通过CMWAP连接上网,浏览器cookie会被网关过滤。所以国内的WAP网站一般会采取URL参数的形式在页面间传递session id;(那二般是什么?二般是CMWAP网关直接把用户的手机号告诉你,当然这中间必然有某些利益)

那么解决方法就是:
1. 不要在这个外链页面加sid,但是显然不可能,sid丢失之后这个用户就相当于登出了
2. 想办法跳转时不带referer

我们只能选方法2,页面跳转有三种方式:
1. 302/301跳转

header('location: http://xxx');

2. meta标签跳转

<meta http-equiv="refresh" content="2;url=http://xxxx" />

3. javascript跳转

document.location = 'http://xxxx';

第三种方法,通过JS跳转对于WAP网站来说显然是不靠谱的。所以我只测试了前面两种方法:
test.php -> test2.php -> test3.php
test.php有一个A标签连接到test2.php,test2.php通过302或meta标签的方式跳转到test3.php
然后分析server log,得到下面的referer字段分析表;

点击页URL = test.php
跳转页URL = test2.php

Location跳转 Meta跳转
UCWEB(S60) 跳转页URL
UCWEB(Anriod) 点击页URL
Opera(S60) 点击页URL 跳转页URL
S60自带浏览器 点击页URL 跳转页URL
Anriod自带浏览器 点击页URL 跳转页URL

结果表明302跳转显然是不靠谱的,对于meta跳转,有的浏览器干脆不传referer,要么直传了跳转页的URL,所以使用meta跳转的方式现在看来还是安全的

为啥说现在看来是安全的:
1 . 因为一个浏览器通过跳转不传referer貌似被认为是不规矩的,看这里http://www.w3help.org/zh-cn/causes/CH9004
2 . 手机浏览器五花八门,我的测试不充分

———–
post by gmail~

xhtml mobile 中限定输入框的输入格式

http://www.developershome.com/wap/wcss/wcss_tutorial.asp?page=inputExtension2

这个网站里关于移动wap开发的文档还是挺全的

对于wml:

<input type="text" format="*N"/>

s60自带浏览器和ucweb都支持

对于xhtml

<input type="text" style="-wap-input-format: '*N'"/>

用s60自带的浏览器可以,ucweb不支持

———–
post by gmail~