PHP为安卓提供接口如何保持会话?
刚用PHP配合安卓做完了一个项目,回过头来整理了下,有几个问题没理清楚:
1.为安卓提供API接口,一般都是返回JSON字符串,这个我封装了一个简单的函数:
function returnMsg($code,$msg,$info){
$message=array();
$message['code']=$code;
$message['msg']=$msg;
if(!empty($info)){
$message['info']=$info;
}
return json_encode($message);
}
发现这个函数不太好用,容易出现多级嵌套,大家有没有好点的建议?
2.为了防止有人恶意请求接口,我这里给每个接口加了一个token,这样做合理么?
3.用户登录后,返回uid给安卓,安卓请求登录后才能访问的页面时,每次请求都带上uid,是这样子的么,有没有更好的方法?
4.为了防止抓包,修改uid遍历其他用户信息,我给每个登录后的用户生成了一个userToken(不同于2中得token),这样做是不是也是合理的??
以上是做接口的过程中,遇到的几个问题,请大家多多指教??
stream
11 years, 5 months ago
Answers
首先,API 不建议带上 cookie 访问,增加 APP 端工作量,增加流量,大幅降低速度,得不偿失。
- 传统场景下的安全问题有很多种解决方案,token 就是一种,在此不再敖述。现在 APP 应该着力解决假 wifi 的问题。假 wifi 即为电脑使用软件利用网卡或路由器等设备建立一个开放 wifi,通过对连入此 wifi 的设备的流量进行监测,得到没有 SSL 加密过的完整 URL,以及所有的cookie,使用此 URL 和 cookie 对服务器进行攻击。
- 使用 SSL (HTTPS)可以直接解决这个问题。
- 如果没有使用 SSL 的条件,如果要让别人拿到 URL 和 cookie 还不能对服务器进行攻击,就需要对此 API 设定一个时间窗口,过期失效。这需要 URL 要有两个参数:time 和 以 time 为 seed 进行 hash 得到的 token。剩余的时间同步、窗口大小设定等问题不再敖述。
- 别忘了对传输的内容也进行校验哦~
- 还是 SSL 好! (⊙o⊙)
Jud.ah
answered 11 years, 5 months ago