【发布时间】:2010-12-17 14:32:44
【问题描述】:
我正在为我的一个宠物项目开发更新功能,并且想知道是否需要花时间确保我的连接安全?
基本上,客户端将用户计算机上的软件版本号发送到服务器,服务器会根据可用的最新版本检查用户版本,如果有更新的版本可用,服务器会发送一个可以进行更新的 url下载自。
通过这种简单的通信,是否有必要担心 SSL 或其他安全措施?
我正在用 C# 编写更新服务器和客户端,这是我第一次在 C# 中使用套接字。
【问题讨论】:
我正在为我的一个宠物项目开发更新功能,并且想知道是否需要花时间确保我的连接安全?
基本上,客户端将用户计算机上的软件版本号发送到服务器,服务器会根据可用的最新版本检查用户版本,如果有更新的版本可用,服务器会发送一个可以进行更新的 url下载自。
通过这种简单的通信,是否有必要担心 SSL 或其他安全措施?
我正在用 C# 编写更新服务器和客户端,这是我第一次在 C# 中使用套接字。
【问题讨论】:
如果您不使用 SSL,攻击者可能会使用到您服务器的虚假记录来毒害客户端计算机的 DNS 记录,实际上指向攻击者的虚假服务器。
当好奇需要升级的客户端尝试联系 www.yourdomain.com 时,操作系统将发出 DNS 请求以查找与该名称关联的 IP 地址。客户端 DNS 请求将发送到该客户端上配置的任何 DNS 服务器。例如,客户端 DNS 服务器可能是他们的无线路由器,而后者又被配置为联系 ISP DNS 服务器。 ISP 的服务器联系根权限,根权限将请求转至您的“权威”DNS 服务器。此时,在正常(未破解)场景中,客户端首先联系的 DNS 服务器接收并缓存响应。该响应又被发送到客户端,以满足名称到 IP 地址映射的请求。
联系附近的 DNS 服务器的目的是允许该服务器缓存响应,以便随后对相同名称的查找快速返回,而不会产生网络外流量。这个缓存可能是一个弱点。如果攻击者“毒害”要查询的 DNS 缓存,他们可以有效地“劫持”您的名称到 IP 地址的映射,从使用该缓存的客户端的角度来看。
然后,假服务器可以通知客户端“升级”到特洛伊木马软件。
所以答案“取决于您的责任”。无论您描述的协商结果如何,都应该适用于下载客户端——否则攻击者可能会在下载过程中更改下载的内容。
我建议您使用 SSL,但答案取决于业务因素,而不是版本协商的技术细节。
上面的答案忽略了最近发现 SSL 的事实vulnerable to man-in-the-middle attacks. 这将很快被各种 SSL 实现修复,我真的只是顺便提一下。这没什么好担心的,关键是 SSL 的设计正是为了防止我描述的那种攻击。
【讨论】:
简短的回答:我肯定会在这里使用 SSL —— 你想确定答案(“是的,新版本 - 就是这样”)来自你,而不是中间人攻击者。
哦,还有一点:就“花时间做这件事”而言,SSL 对开发人员来说基本上是免费的:尽管您必须付费并在服务器上安装 SSL 证书,但客户端 -副业基本上为零(例如,使用 https://,而不是 http://)。
编辑: 虽然在 cmets 中提到过,但无需花费大量现金购买 SSL 证书。例如,GoDaddy 以 9 到 12 美元的价格出售 SSL 证书(取决于今天的报价)。尽管威瑞信代表可能希望您这么想,但没有充分的理由花数百美元购买“品牌名称”SSL 证书:现代浏览器拥有强大的根 CA 列表,其中包括这些廉价的 SSL 证书家伙。
【讨论】:
取决于你的目的。如果您需要第三方难以拦截的连接,可以使用加密/SSL。如果您要在网络资源或处理资源昂贵的地方发送信息,您可能需要重新考虑使用安全通道的决定。如果您要向/从移动设备发送信息,[从优到优] 加密/解密技术的成本非常高,并且会减慢应用程序的通信能力。此外,如果您尝试发送非常突发或密集的信息(即视频或音频+视频流)加密,则会将传输速度降低到没有它时的一小部分。
【讨论】: