最近在用php写app的接口,有一些疑问
首先关于token(令牌)
token是用户登录的时候生成的
用户token在服务端保存入库 客户端则缓存在本地 大部分接口都要求客户端发送token 和服务端数据库中的token进行验证
每个用户唯一token 是由 年月 和 客户端机器码标识 用户id 组成的
(年月是做登录保存期限用的 机器码是在持保证用户下次登录时,快捷识别登录来源,判断是否需要重新登录的重要凭证,用户id其实是顺便加的)
问题来了
=。= 这东西感觉做出来就和session没什么区别
**如果直接抓一下包
每个用户通一个平台的客户端的token都是一样的 对于防攻击并没有什么用**
而且这种token是基于用户的 所以用户的登录 注册验证(防机器人)验证上这种token是帮不了忙的
=。=我还在再设计一个啥 来验证 (有办法在这种token思路上 把登录注册验证也做了吗)
此问题简单至极,以php举例。
但和
session
不一样,和cookies
有点接近,设计这个是为了解决cookies传值麻烦的问题。首先在登陆的过程中,用户向服务端提交数据应有
username
、password
、client_key
php在服务端拿到这些数据之后,用校验算法获取校验值,如
md5
。(ps:不加密码是不行的,否则用户修改密码后之前的还是可以快捷登陆,这不坑人吗)
$salt
是一个加密key
,防止别人猜到加密算法。计算完成后将
$token
返回到客户端,作为存储。以后客户端只需要向服务端发送此$token
和用户名。当php收到这个
$token
就再做一次上面的运算,看是否一致即可快捷判断。如果需要防止恶意注册和登陆,就需要在客户端对
client_key
进行加密,然后服务端解密做验证,然而这并没有什么卵用,一切客户端的代码都是不安全的,可以通过反编译,反混淆来分析,然后照样伪造。所以客户端的加密没有意义。另外,服务器通过ip判断也是一个办法。
然而,从根源上来讲,防止恶意攻击就需要验证手机号才能注册,目前基本上通过此种方法实现。