那些需要自己开发的安全需求(服务端)
最近在实施App安全方面的方案,下面是一些思考。有些安全方面的产品需要购买,本文中的却要自己集成。需要开发的组件很多,所以依个人经验,简单做了下分层,不包括App端和主机环境。
数据处理
通讯层
http协议简单易懂、使用方便,我们大多数网络应用都是基于它开发的。数据展示,移动互联网已经占据了大量市场,对于App端开发,已经进入了混合协议的时代。这就是通讯层,数据传输的通道。
请求可能来自这些地方:
一、APP。 某些移动应用
二、Web端。 大多数网页请求或者H5
三、小程序。 被封装的各种调用(大多数要遵循平台开发方式)
四、开放平台。 各种SASS、PASS。
通讯层的破解难度是:
Socket(自有二进制协议)>WebSocket(wss、ws等)> Https > Http。
通讯层的加密主要是提高***者的分析成本,并不能够防御所有的***。通讯层独立的好处是可以随时进行交互协议的切换或者升级,并不影响下方的业务与策略。
加密层
加密是由调用者和服务者进行约定的一个算法层。目前,有对称加密与非对称加密之分。
对称加密是指维护一个密钥,解秘方即可通过密钥还原出被保护的数据。比较流行的对称加密算法有
DES 3DES AES
对称加密的密钥管理比较难,容易被破解,更换起来成本也比较大,但它的速度比非对称加密快几个数量级。
相对应的,非对称加密是指加密密钥和解密密钥不同的算法。安全性相对较高,但运行速度比较低。常见的非对称加密有:
RSA(耳熟能详) DSA ECC
这里插个有趣的事情。某个重要的root私钥,被倒入到一个专门的小型设备里。此设备被放入保险箱,保险箱需要四个不同的人的密码才能打开。安全级别非常高。
而我们常说的MD5、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请求。后端的处理变来变去,就复杂了很多,也不利于排查问题。
此类问题还有传输了大量用不到的字段,信息嵌套层次过深,错误码紊乱等。许多故障最后的原因让人欲哭无泪。
在通讯层上,某些规范是非常重要的,值得花心思进行设计。
开发模式
开发模式是你给自己留的后门。
经过各种加密,验签,重入防护等组件的保护,你的系统安全性可能已经很高了。高到连你自己也被防护住了。
当你需要人工构造一些请求的时候,就会知道它的威力。通过某些开关或者灰度,可以让你略过某些环节,直接开展对主因的分析,提高验证的效率。
详尽的日志是系统遇到问题时强有力的帮手,当业务流程分支多而长的时候,调用链能显著加快问题的处理速度。在设计伊始,便要考虑对这些功能的集成与配置,以便对关键环节进行调优。
End
安全很重要,售卖靠忽悠。但是不买也是要受伤害的,还是花钱。买平安。
- 那些需要自己开发的安全需求(服务端)
- 摘要 MAC,PIN,磁道密钥 在平时的工作中,很少接触安全这块内容,最近需要自己独立完成安全这块内容,在开发中遇到的问题会在下面的理解中得到相应的解决。 在交易平台中,基于安全考
- 想要开发自己的PHP框架需要那些知识储备?
- 想要开发自己的PHP框架需要那些知识储备?
- Ubuntu中没用自带C/C++开发环境,需要用户自己配置。在UBUNTU中文论坛中的一些帖子集合。
- 学iOS开发之前需要那些准备工作
- 开发一款App的成本,你需要知道的那些事
- wpf自己独立开发进销存服务端与客户端
- 关于安全,开发人员需要知道的 | Linux 中国
- java在线聊天项目 实现基本聊天功能后补充的其他功能详细需求分析 及所需要掌握的Java知识基础 SWT的激活方法,swt开发包下载,及破解激活码
- 浏览器在一次 HTTP 请求中,需要传输一个 4097 字节的文本数据给服务端,可以采用那些方式?
- 项目需求分析完毕,进入开发之前,需要明确的事情
- 不求服务端,自己改接口!Charles抓包工具在Android/iOS开发中的应用
- 开发服务端程序,在存在并发请求场景下,需要考虑一些常规事项简单梳理和总结
- Java 开发人员在工作中需要记住那些东西?
- 做游戏开发需要具备那些知识或技能?
- 做游戏开发需要具备那些知识或技能?
- PHP开发需要注意的安全问题
- 自己开发一个APP需要多少钱
- 【分享】开发人员需要牢记的HTML 5安全问题