首先,这是个很大的命题,之前在Top互联网公司负责过几个对外的服务的研发,也算是有点小经验,我试着答一下:
在Internet环境下,安全问题我主要分为如下几类:
- 信息传输过程中被黑客窃取
- 服务器自身的安全
- 服务端数据的安全
首先,如果能用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) 技术交流分享天天有
时间: 2024-11-08 10:15:29