文档章节

App通讯安全

AaronSheng
 AaronSheng
发布于 2016/12/15 09:28
字数 958
阅读 36
收藏 2

    客户端经常涉及用户操作,用户登录需要使用用户名和密码,为了安全起见,暴露密码的过程越少越好。解决方案如下:

  1. 使用Https协议
    1)客户端使用账户密码登录,服务器返回token。
    服务器收到客户端账户和密码登录,生成<token, id>键值对,例如<123, 1>,并将信息存在redis或者memcache中。

    2)客户端每次操作都携带token作为身份验证 。
    客户端使用代token的API访问服务器,服务器将数据返回给客户端。
    例如:
    客户端访问 https://api.server.com/user/info?token=123,服务器根据token对应的id返回数据。

    3)客户端退出登录,token失效。
    客户端退出登录,服务器从缓存中删除键值对。

    使用Https协议解决了通信的明文问题,但是使用携带token的方式,身份验证依赖token,如果Url被黑客截取,黑客就可以利用token进行任何操作。
     
  2. URL签名
    API中携带token,有可能会导致token泄露,URL签名方式就是用于解决携带token的问题。
    1)客户端使用账户密码登录,服务器返回token。
    服务器收到客户端账户和密码登录,生成<id, token>键值对,例如<1, 123>,并将信息存在redis或者memcache中。

    2)客户端每次操作都对URL签名 。
    客户端使用代签名的API访问服务器,服务器将数据返回给客户端。
    例如:
    sign = md5(https://api.server.com/user/info?token=123)
    客户端访问 https://api.server.com/user/info?userId=1&sign=xxxx,服务器根据userId读取缓存的token,并按照规则进行md5散列生成签名,将生成的签名和URL中携带签名对比,如果相同则操作合法,并返回数据。但是这个方案存在缺陷,如果url被截取,任何人都可以通过url获取用户信息。

    改进:
    sign = md5(https://api.server.com/user/info?timestamp=1425860700&token=123) 
    客户端访问 https://api.server.com/user/info?userId=1&timestamp=1425860700&sign=xxxx,服务器根据先拿URL上的timestamp与当前时间对比,如果时间差超过一定时间(比如30s),则认为非法操作;如果时间差合法,则继续后面操作。

    3)客户端退出登录,token失效。
    客户端退出登录,服务器从缓存中删除键值对。

    URL签名的方式只能保护token不被泄露,但是无法保证敏感数据不被截取。
     
  3. AES对称加密
    URL签名保证了token不被泄露,但是并不能保证敏感数据泄露。

    1)客户端使用账户密码登录,服务器返回token。
    服务器收到客户端账户和密码登录,生成<id, token>键值对,例如<1, 123>,并将信息存在redis或者memcache中。

    2)客户端每次操作都对URL签名 。
    客户端使用代签名的API访问服务器,服务器将数据返回给客户端。
    例如:
    sign = md5(https://api.server.com/user/info/name?timestamp=1425860700&token=123)
    客户端POST访问https://api.server.com/user/info/name?userId=1&timestamp=1425860700&sign=xxx修改名字,这时候就会暴露自己的名字。
     改进:
    secret_name = AES(name, token) 
    sign = md5(https://api.server.com/user/info/secret_name?timestamp=1425860700&token=123)
    客户端POST访问https://api.server.com/user/info/secret_name?userId=1&timestamp=1425860700&sign=xxx修改名字,服务器使用AES解密secret_name,再进行修改操作。 

    3)客户端退出登录,token失效。
    客户端退出登录,服务器从缓存中删除键值对。
     
  4. 更进一步安全
    使用DES加密操作,Https原理就是先使用RSA加密获取key,再使用AES加密通讯;
    涉及敏感信息都需要输入密码确认,密码用不存在客户端。

   

© 著作权归作者所有

AaronSheng
粉丝 14
博文 52
码字总数 51122
作品 0
深圳
程序员
私信 提问
加载中

评论(1)

honli
honli
我还是觊觎你的源码😏看源码功力大增
极路由安全设计架构分析

0×00 前言 现代智能路由器是目前物联网发展链条上一个不可或缺的重要组成部分,搞清楚其架构设计对将来设计物联网有深远的影响,当然为更安全的设计物联网架构起到关键作用。本文将针对智能...

广岛秋泽
2015/08/26
0
0
WhatsApp爆安全漏洞,或被NSA利用

IT经理网点评:Facebook收购WhatsApp近日成为业界的焦点话题,争论的焦点是WhatsApp到底值不值190亿美元,但是人们忽略了一点,作为拥有4.5亿活跃用户的创业公司,WhatsApp具有快速发展的创业...

Cashcow
2014/02/24
0
0
比移动银行更糟糕:全球移动证券APP安全分析报告

关于移动银行APP的安全漏洞报道已经足够触目惊心,但是当我们将目光投向移动证券APP,我们发现安全问题日益严峻,比我们想象得还要糟糕,近日Ioactive发布了一个针对全球21款主流移动证券APP...

CashCat
2017/12/07
0
0
App端与服务器之间的安全策略

一:https保证通道安全 二:下发token保证无登录的用户不能随意调用服务 三:token有过期时间,保证服务不被长期木马攻击 四:对于支付等安全功能,需要另外增加支付密码校验和短信验证 五:...

gydtep
2018/10/01
0
0
app后端设计--总目录

做了3年app相关的系统架构,api设计,先后在3个创业公司中工作,经历过手机网页端,android客户端,iphone客户端,现就职于app云后端平台bmob(想了解bmob点击这里)。其中的乐与苦,得与失,...

云栖希望。
2017/12/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

矩阵中的路径

判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向上下左右移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路...

Garphy
1分钟前
0
0
Hibernate 5 Maven 仓库的 Artifacts

Hibernate artifacts 官方发布的仓库在 JBoss Maven repository 中。Hibernate 发布的 artifacts 也会同时同步到 Maven Central 仓库中,这是一个自动同步进程(可能会有一些延迟)。 Hibern...

honeymoose
49分钟前
4
0
如何学习uni-app?

uni-app 是一个使用 Vue.js 开发跨平台应用的前端框架。 开发者通过编写 Vue.js 代码,uni-app 将其编译到iOS、Android、微信小程序、H5等多个平台,保证其正确运行并达到优秀体验。 <templ...

达叔小生
53分钟前
4
0
OSChina 周一乱弹 —— 后来马云就一心想挣钱了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 小小编辑:《空帆船》- 朴树 《空帆船》- 朴树 手机党少年们想听歌,请使劲儿戳(这里) @webw :第二次被锁在电梯里了 上次你忘带电梯卡, ...

小小编辑
今天
661
11
关于does not give a valid preprocessing token

#define VFUNC(self) ((##self##)->_vptr) 这样在gcc下会编译失败, VC不会 报pasting ) does not give a valid preprocessing token 据说是因为版本问题 解法:去掉## define VFUNC(self) (......

shzwork
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部