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

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

在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

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

没有踩过很多坑,哪里知道很多事。写完之后整个人都不好了

欢迎加入Reboot运维开发千人群(365534424)  技术交流分享天天有

你可能感兴趣的:(互联网,socket,服务器,安全,TCP/IP)