API 安全机制
为什么要保证 API 安全
接口的安全性主要围绕 Token,Timestamp 和 Sign 三个机制展开设计, 保证接口的数据不会被篡改和重复调用, 下面具体来看:
Token 授权机制: 用户使用用户名密码登录后服务器给客户端返回一个 Token(通常是 UUID), 并将 Token-UserId 以键值对的形式存放在缓存服务器中. 服务端接收到请求后进行 Token 验证, 如果 Token 不存在, 说明请求无效.
时间戳超时机制: 用户每次请求都带上当前时间的时间戳 timestamp, 服务端接收到 timestamp 后跟当前时间进行比对, 如果时间差大于一定时间(比如 5 分钟), 则认为该请求失效, 这个时间要保证足够完成本次请求的同时尽量短, 可以减少缓存服务器的压力(见签名机制).
签名机制: 将 Token 和时间戳加上其他请求参数就行 MD5 或 SHA-1 算法 (可根据情况加点盐) 加密, 加密后的数据为本次请求的签名 sign, 并将该签名存放到缓存服务器中, 超时时间设定为跟时间戳的超时时间一致(这就是为什么要尽量短, 二者时间一致可以保证无论在 timestamp 规定时间内还是外本 URL 都只能访问一次). 服务端接收到请求后以同样的算法得到签名, 并跟当前的签名进行比对, 如果不一样, 说明参数被更改过, 直接返回错误标识. 同一个签名只能使用一次, 如果发现缓存服务器中已经存在了本次签名, 则拒绝服务.
防止别人随便调用你的 API
保证传输数据的安全
那么你的 API 还在裸奔吗? 看阿里大师教你安全的代码姿势!(附详细视频教程)
文末有视频教程获取方式
1, 前后端分离 mvvm 模式的 N 宗罪;
2,5 分钟搞定密码学的对称 / 非对称加密;
3, 接口签名, 防止数据篡改之泰斗;
4, 用代码告诉你, 令牌实现身份认证;
5, 优雅处理身份认证, 让业务代码更 6;
数据加密
加密方法
1, 对称加密
AES,3DES,DES 等, 适合做大量数据或数据文件的加解密.
2, 非对称加密
如 RSA,Rabin. 公钥加密, 私钥解密. 对大数据量进行加解密时性能较低.
API 有哪些安全问题? http 接口 - 前后端分离 mvvm
安全够了吗, 还有哪些要做?
身份认证 - token 令牌
身份认证的封装 - cookie 隐式携带 token
传输安全
互联网发展到今天, 大家越来越重视自己的隐私, 各大公司也越来越重视数据的安全. 传输过程中的数据安全解决方案主要是 "HPPTS", 能够有效防止中间人攻击等. 但是 API 中重要的参数还是要进行加密, 常用 DES 或者 AES 进行加密. 有见过 API 中密码直接 MD5 后就行传输, 但是 MD5 在 2009 年谢涛和冯登国仅用了 220.96 的碰撞算法复杂度, 破解了 MD5 的碰撞抵抗, 该攻击在普通计算机上运行只需要数秒钟, 引自[维基百科].
总结
安全是一个永恒的话题, 随着各大网站全站 https 的推进, 安全也越来越被重视. 签名设计大家必须有, HTTPS 希望大家有.
本文的重点是 API 的接口安全. 需要更详细思维导图和视频资料的可以加一下技术交流分享群:"708 701 457" 免费获取
同时我经过多年的收藏目前也算收集到了一套完整的学习资料, 包括但不限于: 分布式架构, 高可扩展, 高性能, 高并发, Jvm 性能调优, Spring,MyBatis,Nginx 源码分析, Redis,ActiveMQ,,Mycat,Netty,Kafka,MySQL,Zookeeper,Tomcat,Docker,Dubbo,Nginx 等多个知识点高级进阶干货, 希望对想成为架构师的朋友有一定的参考和帮助
来源: http://www.jianshu.com/p/7cdf37404542