App接口设计(一)

写在前面的话

接口就是服务端提供给客户端(App)端的一种通信协议,业界主流采用RESTful API的方式来设计接口,基于HTTP/HTTPS协议,以JSON为数据承载体。
当然也可以换个角度另外解释下:
服务器:“天王盖地虎?”
App甲:“宝塔镇河妖。。。”
App乙:“小鸡炖蘑菇!”
服务器:“小乙啊,组织欢迎你~”
App甲:“ ????”

拒绝HTTP裸奔

某些同学喜欢这么设计接口:
request: http://api.simple.com/fuckingday?time=today
response:{data:"yes,it is!"}
粗看,没毛病啊~

但是http有两大特性:
一、是传输基于明文,则说明任何第三者都可以轻轻松松截取App发送到服务器的http请求报文。
二、前后请求之间是无状态的,也就是说前后的接口请求,服务端并不能很好认为是具有相关性的。

所以血腥案例触发:
第三者截取请求http://api.simple.com/fuckingday?time=today报文,将参数time改为tomorrow或者yesterday后发送给服务器。
服务器只会照单全收并返回yes,it is! 因为宝宝也委屈啊,当初跟那个屁客户端就是这么密谋协议暗号的;现在别问我为啥天天过得那么操蛋?我想静静。

接口参数签名

既然报文容易被截取并且伪造,那只能从增加游戏难度入手。
我们需要知道世界上存在一种算法--MD5算法,也叫消息摘要算法,从名字我们大概也能知道他的什么底细:可以将不限制特定长度的字符串转换成特定长度的字符串信息,复杂吧?

上面是增加理解难度的玩法,建议略过,直接从一个例子入手:
假如MD5("time=today") = "a90b2504ef59c452" 也就是"time=today"经过md5算法生成的摘要是"a90b2504ef59c452"这串字符串。
App请求服务器:
request:http://api.simple.com/fuckingday?time=today&signture=a90b2504ef59c452
服务端收到request请求后,取参数time=today开始MD5算法,得出签名摘要是"a90b2504ef59c452",然后对比下signture参数值,发现尼玛是亲兄弟啊,暗号对上!返回 yes,it is! 标示接口请求成功。

这时候,某个缺心眼的第三者截取了报文,把time=today改成time=tomorrow后将伪造报文发给服务器。
request:http://api.simple.com/fuckingday?time= tomorrow&signture=a90b2504ef59c452
服务器收到请求一运算MD5("time=tomorrow")="3fbf1419d674ce15"明显与signture参数值"a90b2504ef59c452"存在出入,服务器直接返回 {data:"丢雷楼谋,别诓我"},直接请求拒绝,伪造失败。
PS:如果参数不止一个怎么搞?业界做法一般都是按照参数首字母字典序,从小到大排列好再进行MD5摘要算法生成签名,例如
MD5("akey=xxxxxxbkey=yyyyyyckey=zzzzzz") = "2ac028173a8b6b13"

TOKEN盐字段

甲:这接口的设计?
乙:行家吖!来看看我刚刚搞的接口加密。
甲:这算法,low到掉牙了。
乙:是你不懂吧大叔。
甲:我知道,MD5算法走一下。

摘要MD5算法是一个公开的算法,有经验的大叔一般都轻轻松松会找出MD5("time=today") = "a90b2504ef59c452" 这个规律设计,然后通过MD5("time=tomorrow")="3fbf1419d674ce15"生成新的伪造签名后,同时更改time和signture两个参数的值
request:http://api.simple.com/fuckingday?time=tomorrow&signture= 3fbf1419d674ce15
服务端也只能默默的:WQNMLGB

但是!
虽然我们不能防范老鸟的破解,但是我们可以把算法的水搞浑啊O(∩_∩)O~~
所以一种不可描述的字段,会被我们衔接在加密字段的前后,业界上把这种不可描述的字段叫做传说中的盐字段。
例如我们选择了“ WQNMLGB”这一富有生命表现力的字符串作为盐,那么我们可以这么设计signtrue生成的生成算法:
MD5("WQNMLGBtime=todayWQNMLGB") = "37b7227e3c3ee8c0"
但第三者拦截篡改报文伪造请求时,他几乎不可能仅仅通过http携带的信息中轻松找到对应的盐字段,所以可以一定程度达到了接口保密的需求,当然这点安全性远远还是不够的。

结语

短小精悍一直是博主最喜欢的风格,毕竟一次性码太多不带稿费的字也是很伤身的,所以第一篇就暂且写到这里。
后续会继续推出几篇关于App接口设计的博客。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容