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

这篇曾经是答在这里的 互联网中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

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

时间: 2024-10-26 04:28:52

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

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

首先,这是个很大的命题,之前在Top互联网公司负责过几个对外的服务的研发,也算是有点小经验,我试着答一下: 在Internet环境下,安全问题我主要分为如下几类: 信息传输过程中被黑客窃取 服务器自身的安全 服务端数据的安全 首先,如果能用https,就尽量用https,能用nginx等常见服务器,就用常见服务器,主要能避免以下问题: 自己实现的协议&Server端可能会有各种Bug,被缓冲区溢出攻击等 SSL加密体系在防监听方面已经足够成熟,值得信赖 所幸,私有协议服务的攻击需要黑客分析协议,

互联网服务器的实现过程需要考虑哪些安全问题 & 加解密及哈希知识点

http://www.cnblogs.com/charlesblc/p/6341265.html 其中的一篇. 参考 https://zhuanlan.zhihu.com/p/20336461?refer=auxten 网络编程(四):互联网中TCP Socket服务器的实现过程需要考虑哪些安全问题? 在Internet环境下,安全问题我主要分为如下几类: 信息传输过程中被黑客窃取 服务器自身的安全 服务端数据的安全 首先,如果能用https,就尽量用https,能用nginx等常见服务器,就用

iOS网络编程实践--NSStream实现TCP Socket iPhone客户端

客户端我们使用iPhone应用程序,画面比较简单.点击发送按钮,给服务器发送一些字符串过去.点击接收按钮就会从服务器读取一些字符串,并且显示在画面上. 有关客户端应用的UI部分不再介绍了,我们直接看代码部分,Socket客户端可以采用CFStream或NSStream实现,CFStream 实现方式与服务器端基本一样.为了给读者介绍更多的知识,本例我们采用NSStream实现.NSStream实现采用Objective-C语言,一些 面向对象的类. 下面我们看看客户端视图控制器ViewContr

Java基础知识强化之网络编程笔记07:TCP之服务器给客户端一个反馈案例

1. 首先我们搭建服务器端的代码,如下: 1 package cn.itcast_07; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.OutputStream; 6 import java.net.ServerSocket; 7 import java.net.Socket; 8 9 public class ServerDemo { 10 public static void ma

[python] 网络编程之套接字Socket、TCP和UDP通信实例

很早以前研究过C#和C++的网络通信,参考我的文章: C#网络编程之Tcp实现客户端和服务器聊天 C#网络编程之套接字编程基础知识 C#网络编程之使用Socket类Send.Receive方法的同步通讯 Python网络编程也类似.同时最近找工作笔试面试考察Socket套接字.TCP\UDP区别比较多,所以这篇文章主要精简了<Python核心编程(第二版)>第16章内容.内容包括:服务器和客户端架构.套接字Socket.TCP\UDP通信实例和常见笔试考题. 最后希望文章对你有所帮助,如果有不

C#网络编程系列文章(一)之Socket实现异步TCPserver

原创性声明 本文作者:小竹zz 本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列文件夹 C#网络编程系列文章(一)之Socket实现异步TCPserver C#网络编程系列文章(二)之Socket实现同步TCPserver C#网络编程系列文章(三)之TcpListener实现异步TCPserver C#网络编程系列文章(四)之TcpListener实现同步TCPserver C#网络编程系列文章

转 网络编程学习笔记一:Socket编程

网络编程学习笔记一:Socket编程 “一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. ——有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的.本文的主要内容如下:

【Java】Java网络编程菜鸟进阶:TCP和套接字入门

Java网络编程菜鸟进阶:TCP和套接字入门 JDK 提供了对 TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)这两个数据传输协议的支持.本文开始探讨 TCP. TCP 基础知识 在“服务器-客户端”这种架构中,服务器和客户端各自维护一个端点,两个端点需要通过网络进行数据交换.TCP 为这种需求提供了一种可靠的流式连接,流式的意思是传出和收到的数据都是连续的字节,没有对数据量进行大小限制.

linux网络编程——套接字(socket)入门

1.套接字的基本结构 struct sockaddr 这个结构用来存储套接字地址. 数据定义: struct sockaddr { unsigned short sa_family; /* address族, AF_xxx */ char sa_data[14]; /* 14 bytes的协议地址 */ }; sa_family 一般来说,都是"AFINET". sa_data 包含了一些远程电脑的地址.端口和套接字的数目,它里面的数据是杂溶在一切的. 为了处理struct socka