网络编程四:互联网中TCP Socket服务器的实现过程需要考虑哪些安全问题

wKioL1Z4sNyR1HHTAALGkOT_xTQ973.jpg

这篇曾经是答在这里的 互联网中TCP Socket服务器的实现过程需要考虑哪些安全问题- auxten 的回答

最近总是有人问我相关的问题,在专栏补发一下,希望能帮到更多人

首先,这是个很大的命题,之前在360负责过几个对外的服务的研发,也算是有点小经验,我试着答一下

在Internet环境下安全问题我主要分为如下几类

  • 1. 信息传输过程中被黑客窃取

  • 2. 服务器自身的安全

  • 3. 服务端数据的安全

首先,如果能用https,就尽量用https,能用nginx等常见服务器,就用常见服务器,主要能避免以下问题:

  •   自己实现的协议&Server端可能会有各种Bug被缓冲区溢出攻击等

  •  SSL加密体系在防监听方面已经足够成熟值得信赖

所幸,私有协议服务的攻击需要黑客分析协议,这就给一般的小服务增加了一层保护。但如果是在大公司做事,树大招风,就必须至少做到理论上没有安全漏洞。神马,xor混淆一下,C/S端写死一个对称密钥这种掩耳盗铃的事情就不要做了,不然会死的很难看。

如果需要自己实现Server端,实现一套合格的SSL还是很考验功底的:

  •  首先要弄明白SSL加密体系密钥交换的原理

  •  对各种对称、非对称加密算法要有深刻的理解

  • 用非对称加密算法怎么实现一套密钥交换体系

  • 如何处理ca证书在自签名情况下怎么避免中间人攻击

工程实现过程中,要考虑

  • 各种可能的缓冲区溢出攻击

  • SYN flood攻击慢连接攻击

  •  DDoS防起来有难度但至少能防御DoS攻击

业务逻辑层面,要考虑

  • 每个接口都要做好用户&权限验证

  •  接口会不会被人乱用重放攻击

  • 攻击方会不会找到一个比较消耗服务端资源的接口用很小的代价耗尽服务端资源

  • 用户的用户名密码会不会被通过接口破解参见2014 celebrityphoto hack

  • 你的服务会不会被黑客利用去攻击别的服务特别是会根据用户输入抓取什么资源的服务

  • 古老的SQL注入

  • 无耻的仿冒服务DNS欺诈

  • 涉及HTML的还要考虑跨站……

即使你做到了天衣无缝,还要考虑队友有时会掉链子

  • glibc、openssl这些基础的库也会爆出漏洞参见Heartbleed

  • 同一台主机上的其它服务被攻陷

写完之后整个人都不好了

关于加密解密算法参见:加解密Encryption& 哈希Hash算法----入门指引 - 面向工资编程 - 知乎专栏


◆著作权归作者所有◆

商业转载请联系作者获得授权非商业转载请注明出处。
作者大家可以看我的知乎专栏
链接
http://zhuanlan.zhihu.com/auxten/20315482
这是一个系列的文章之四之五已经写完了会陆陆续续搬到Linuxtone着急的同学可以看

  • 网络编程(五):长连接&连接池的应用

  • 网络编程(六):端口那些事儿

==================================

》》想要了解更多精彩内容欢迎关注》》

联系Reboot-有更多技术分享、交流请加群238757010

你可能感兴趣的:(epoll,网络编程,poll)