Security 在编写自动更新客户端时,我必须担心哪些安全问题?

Security 在编写自动更新客户端时,我必须担心哪些安全问题?,security,auto-update,Security,Auto Update,我正在编写一个自动更新客户端。这是一个非常简单的应用程序: 1) 检查中央服务器以查看是否存在某个应用程序的更新 2) 如果存在较新版本,则从服务器下载安装程序 3) 运行安装程序 除了服务器端的问题(比如有人入侵我们的网站并在那里放置一个“更新的”恶意应用程序),在实现此功能时,我必须考虑哪些客户端安全问题 我目前的想法是: 1) 校验和。将校验和包含在.xml文件中,并对照下载的文件进行检查。(加密前还是加密后?) 2) 加密文件。使用一些私钥对文件进行加密,并让此程序使用公钥对其进行解密

我正在编写一个自动更新客户端。这是一个非常简单的应用程序:
1) 检查中央服务器以查看是否存在某个应用程序的更新
2) 如果存在较新版本,则从服务器下载安装程序
3) 运行安装程序

除了服务器端的问题(比如有人入侵我们的网站并在那里放置一个“更新的”恶意应用程序),在实现此功能时,我必须考虑哪些客户端安全问题

我目前的想法是:
1) 校验和。将校验和包含在.xml文件中,并对照下载的文件进行检查。(加密前还是加密后?)
2) 加密文件。使用一些私钥对文件进行加密,并让此程序使用公钥对其进行解密

这两者或其中一个是否都是必要和充分的?还有什么我需要考虑的吗?<
请记住,这只是针对客户端的问题。我几乎无法控制服务器本身。

如果您通过https检索所有信息并检查有效的证书,那么您可以确保数据来自您的服务器。

如果我可以破坏提供补丁的服务器,并且校验和在同一台服务器上,那么我可以破坏校验和

如果不使用SSL传递文件,则加密修补程序非常有用


执行程序的用户通常无权写入安装目录(出于安全原因;这适用于桌面应用程序以及web服务器上的PHP脚本)。在确定如何安装修补程序时,您必须考虑到这一点。

校验和的强度仅与下载它们的站点相同。
如果您使用非对称签名,以便自动更新客户端具有公钥,那么您可以对更新进行签名,如果有人入侵您的网站,只要他们没有获得私钥就无所谓。

我强烈建议您使用https(带有有效证书),以及您将要执行的任何其他操作。你可能认为你可以不用它,但几乎每个人都把它搞砸了。你用公钥加密某些东西,然后用私钥解除加密。人们经常会把这件事搞砸。@Tom:是的,这似乎是最流行的观点!谢谢你的评论。@Jared:所以,我想如果我想把内容隐藏起来,我就这么做。既然我不关心隐私,只需要验证,我就不换了吗?我完全迷路了吗?(汤姆说人们经常弄错这一点,为什么;)?)我的意思是,任何人都可以用我的公钥加密文件。应该只有我能用我的私钥做到这一点。这一点毫无意义,因为我将使用https,但出于学术考虑,最好知道。只需对可下载文件使用校验和。正如Tim提到的,解决问题很难,而且在我看来,为不可否认性做这样的努力太多了。校验和或数字签名(虽然不是加密,但它很相似)就是你所需要的。另外,使用HTTPS进行传输安全。添加校验和仍然是一个好主意,只是另一个安全层。HTTPS+校验和就是我要使用的。我不会在服务器端对文件进行任何加密。