最近在实施App安全方面的方案,下面是一些思考。有些安全方面的产品须要购买,本文中的却要本身集成。须要开发的组件不少,因此依我的经验
,简单作了下分层,不包括App端和主机环境。算法
http协议简单易懂、使用方便,咱们大多数网络应用都是基于它开发的。数据展现,移动互联网已经占据了大量市场,对于App端开发,已经进入了混合协议的时代。这就是通信层,数据传输的通道。小程序
请求可能来自这些地方: 1、APP。 某些移动应用 2、Web端。 大多数网页请求或者H5 3、小程序。 被封装的各类调用(大多数要遵循平台开发方式) 4、开放平台。 各类SASS、PASS。后端
通信层的破解难度是: Socket(自有二进制协议)>
WebSocket(wss、ws等)>
Https >
Http。安全
通信层的加密主要是提升攻击者的分析成本,并不可以防护全部的攻击。通信层独立的好处是能够随时进行交互协议的切换或者升级,并不影响下方的业务与策略。bash
加密是由调用者和服务者进行约定的一个算法层。目前,有对称加密与非对称加密之分。网络
对称加密是指维护一个密钥,解秘方便可经过密钥还原出被保护的数据。比较流行的对称加密算法有工具
DES
3DES
AES
复制代码
对称加密的密钥管理比较难,容易被破解,更换起来成本也比较大,但它的速度比非对称加密快几个数量级。post
相对应的,非对称加密是指加密密钥和解密密钥不一样的算法。安全性相对较高,但运行速度比较低。常见的非对称加密有:加密
RSA(耳熟能详)
DSA
ECC
复制代码
这里插个有趣的事情。某个重要的root私钥,被倒入到一个专门的小型设备里。此设备被放入保险箱,保险箱须要四个不一样的人的密码才能打开。安全级别很是高。spa
而咱们常说的MD五、SHA1等,并不属于加密算法。
经过对传输的信息进行验证,咱们就可以判断信息是否被篡改过。有些信息,好比密码,即便是简单的MD5,也比将原文保存下来好得多。
虽然DSA、RSA等,可以对信息进行数字签名,但咱们经常使用仍是一些摘要算法,也叫作Hash算法。
摘要算法不能对数据进行逆向解密,一般经过加盐的方式进行摘要保护。常见的摘要算法有:
MD5
SHA1
Bcrypt
复制代码
值得一提的是Bcrypt,目前应用比较普遍。它的特色是即便是对相同的信息进行摘要,也会生成不一样的内容,隐蔽性更强。
它的加密结果相似这种,你必定见过:
$2a$10$iRdNmYoINR8QqynemTsP2OzFtM7N5pFPoBFuzAtvR6YBtov4gRt7e
复制代码
使用上,有些系统喜欢使用多重的摘要算法进行计算,安全性更高一些。但一旦被猜解,就形同虚设。
多重hash:md5(md5(sha1(str))).
但数据仍是可以伪造。业务层须要对传入的参数进行验证,进行真正业务意义上的判断。好比对某些余额操做,使用MVCC+CAS
进行保护等。
请求大部分应该是幂等的,不可以重入。伪造的信息应该可以经过自定义的规则被识别。
扫描工具会扫描一些相似XXE、Struts漏洞之类的,这里是不少人的天堂。这种,建议仍是买服务吧。
还有最后一道,风控系统。虽然重要,但有能力搞的公司不多,包括一些P2P系统,那就让子弹多飞一会吧。
我以为坑多多的优惠券就是业务防御的范畴。固然还有银行这种,过后跨省追捕的,属于武装业务防御。
同一类业务交互,一个http请求中既带有requestbody,又有request params;另外一个请求却变成了post请求。后端的处理变来变去,就复杂了不少,也不利于排查问题。
此类问题还有传输了大量用不到的字段,信息嵌套层次过深,错误码紊乱等。许多故障最后的缘由让人欲哭无泪。
在通信层上,某些规范是很是重要的,值得花心思进行设计。
开发模式是你给本身留的后门。
通过各类加密,验签,重入防御等组件的保护,你的系统安全性可能已经很高了。高到连你本身也被防御住了。
当你须要人工构造一些请求的时候,就会知道它的威力。经过某些开关或者灰度,可让你略过某些环节,直接开展对主因的分析,提升验证的效率。
详尽的日志是系统遇到问题时强有力的帮手,当业务流程分支多而长的时候,调用链能显著加快问题的处理速度。在设计伊始,便要考虑对这些功能的集成与配置,以便对关键环节进行调优。
安全很重要,售卖靠忽悠。可是不买也是要受伤害的,仍是花钱。买平安。