专栏首页架构专题那些需要自己开发的安全需求(服务端)

那些需要自己开发的安全需求(服务端)

最近在实施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

安全很重要,售卖靠忽悠。但是不买也是要受伤害的,还是花钱。买平安。

本文分享自微信公众号 - 小姐姐味道(xjjdog)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基于合泰单片机的高校公寓远程能源监控系统

    合泰半导体隶属台湾盛群半导体集团,合泰杯单片机应用设计竞赛的比赛形式为:作品自由发挥,要在几个月之内完成,且必须使用合泰单片机。比赛分为三个环节:初赛、复赛、决...

    正念君
  • 【RT-Thread笔记】裸机系统与多线程系统

    轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情,大概的伪代码具体如代码清单 1-1所示:

    正念君
  • 通过Hack方式实现SDC中Stage配置联动刷新

    最近项目组准备开发一个IoT平台项目,需要使用到StreamSets DataCollector组件进行数据处理。 其中的一个Stage,产品经理设计了一个如...

    2Simple
  • SAP Cloud Platform上Destination属性为odata_gen的具体用途

    今天工作发现,SAP Cloud Platform上创建Destination维护的WebIDEUsage属性很有讲究:

    Jerry Wang
  • 如何阅读Python入门教程

    经常有小伙伴会问:如何入门学习Python呢?网上教程这么多,有电子书,有大佬们的私人博客,哪个更靠谱呢?为什么学到一半觉得Python越学越难,根本学不下去啊...

    马哥Python
  • SAP Cloud Platform创建Destination时Additional properties属性的维护

    Values for the WebIDEUsage property determine how the SAP Web IDE interprets the...

    Jerry Wang
  • 微服务架构之「 访问安全 」

    应用程序的访问安全又是我们每一个研发团队都必须关注的重点问题。尤其是在我们采用了微服务架构之后,项目的复杂度提升了N个级别,相应的,微服务的安全工作也就更难更复...

    黄泽杰
  • 达沃斯建站告诉你排名与流量之间关系?

      【排名与流量】网站排名和网站流量是互补的和互利的。如果你说你的网站在主页上排名,但没有流量,网站排名做什么?如果你的网站有很多流量,网站就是一个垃圾网站,不...

    达沃斯分享
  • Spring Boot实现带STOMP的WebSocket

    WebSocket协议是应用程序处理实时消息的方法之一。最常见的替代方案是长轮询(long polling)和服务器推送事件(server-sent event...

    乱敲代码
  • SAP Cloud Connector里点击Check按钮的可达性roundtrip实现

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券