我正在为我的宠物项目开发更新功能,并想知道我是否需要花时间确保我的连接安全?
客户端基本上将用户计算机上的软件版本号发送到服务器,服务器根据可用的最新版本检查用户版本,如果有更新的版本,则服务器发送更新可以的URL从。下载。
通过这种简单的通信,是否有必要担心SSL或其他安全措施?
我在C#中编写更新服务器和客户端,这是我第一次使用C#中的套接字。
答案 0 :(得分:2)
如果您不使用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的设计正是为了防止我所描述的那种攻击。
答案 1 :(得分:0)
简短回答:我肯定会在这里使用SSL - 你要确定答案(“是的,新版本 - 这里是”)来自你,而不是中间人攻击者。
哦,另外一点:就“花时间做这件事”而言,SSL基本上对开发人员免费:虽然您必须在服务器上付款并安装SSL证书 - 客户端 - 边工作基本上为零(例如,使用https://,而不是http://)。
编辑: 虽然在评论中提到,但是没有必要花大量现金购买SSL证书。例如,GoDaddy出售的SSL证书价格在9美元到12美元之间(取决于今天的报价)。尽管Verisign的代表可能会想你,但没有充分的理由花费数百美元购买“品牌”SSL证书:现代浏览器有一个强大的根CA列表,其中包括这些廉价的SSL证书人员。
答案 2 :(得分:0)
取决于您的目的。如果您需要第三方难以拦截的连接,请使用加密/ SSL。如果您要发送网络资源或处理资源成本高昂的信息,您可能需要重新考虑使用安全通道的决定。如果您要向移动设备发送信息或从移动设备发送信息,那么[从优秀到最佳]加密/解密技术的成本非常高,并且会降低应用程序的通信能力。此外,如果您尝试发送非常突发或密集的信息(即视频或音频+视频流)加密,请将传输速度降低到没有它的情况下的一小部分。