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

1

这篇曾经是答在这里的,互联网中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 celebrity photo hack
  • 你的服务会不会被黑客利用去攻击别的服务,特别是会根据用户输入抓取什么资源的服务
  • 古老的SQL注入
  • 无耻的仿冒服务,DNS欺诈
  • 涉及HTML的,还要考虑跨站……

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

  • glibc、openssl这些基础的库也会爆出漏洞,参见:Heartbleed
  • 同一台主机上的其它服务被攻陷

写完之后整个人都不好了

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

文章分类 后端, 技术博客, 运维开发

发表评论

电子邮件地址不会被公开。

在线交流

数百位业内高手和同行在等你交流
Reboot运维开发分享