保护网络部署安装后的点击

Tim*_*Tim 6 deployment passwords clickonce

我的网站上有一个指向 Visual Studio 生成的标准发布页面的链接。我担心的是,如果有人找到该页面的 URL,他们就可以下载我的软件。当然,我可以用密码保护带有链接的页面,但它仍然无法保护下载 URL。有什么方法可以保证上传后的点击次数吗?我环顾四周,似乎我就陷入了这种感觉。

小智 4

公共 URL 是 ClickOnce 部署中的一个安全问题。但是,如果您的 Web 服务器安装了 Windows 和 .NET,则可以解决您的问题。告诉我你有吗?如果你有的话,我将不得不为 Linux Web 服务器想出另一种解决方法。

简短的

首先,了解一些有关 ClickOnce 部署的信息。部署应用程序时,服务器上发出的 GET 请求为(假设WebDir是服务器上的发布目录)

G-1。GET /WebDir/setup.exe(初始下载)
G-2。GET /WebDir/MyApp.Application(setup.exe -url 请求)
G-3。GET /WebDir/MyApp.Application(.应用程序部署提供商 URL 请求)
G-4。GET /WebDir/Application Files/MyApp_1_0_0_0/MyApp.exe.manifest(申请清单请求)
G-5。GET /WebDir/Application Files/MyApp_1_0_0_0/MyApp.exe.deploy
和其他 .deploy 文件...(应用程序文件请求)

执行

现在,解决方案是在服务器上拦截这些文件请求。在 IIS 上,您可以附加自定义 HTTPHandler 并处理请求。在 Apache 上,您可以使用 .htaccess 文件将请求重定向到 PHP 代码。除此之外,您还必须uid为从服务器下载的客户端实例生成唯一标识符(可以是您的许可证密钥),并将其放入部署提供程序 URL 查询参数中。

目录结构

"Application"在您的内部创建一个文件夹WebDir并限制对/WebDir/Application/. 休息一切都可以在里面/WebDir/

文件请求

因此,您可以在 Windows 计算机上托管的 Apache Web 服务器上执行以下操作:

  1. 创建自定义下载页面或使用通过使用 Visual Studio 发布应用程序创建的下载页面(但您必须手动编辑它!)。我们假设该页面是/WebDir/Download.php

  2. 从 验证用户身份后Download.php,您必须将setup.exe代码(可以在 PHP 中使用readfile())发送给用户。然而,问题是 bootstrapper ( setup.exe) 在安装后将执行 GET 请求 [G-2]。现在不要忘记,您必须验证此文件请求。因此基本上您可以在返回文件之前更改"setup.exe -url"要包含的属性。uid例如:将其更改为/WebDir/uid/MyApp.Application[G-2]。您可以使用MsiStuff.exe更改引导程序的 URL 属性。

  3. 使用.htaccess文件将 [G-2] 重写为/WebDir/Handler.php?user=uid. 从Handler.php,您可以检查它是否有效uid。如果它有效,您必须uid在部署提供程序 URL 中包含 ,并在部署清单中包含“依赖程序集路径”,以便在出现升级请求时(它本质上是请求部署清单),您也可以在那里验证用户。添加uid到查询字符串参数。例如:将其更改为/WebDir/MyApp.application?user=uid[G-3]。不要忘记,一旦修改清单,您就必须放弃清单。使用Mage或编写自己的代码来做到这一点。

所以最后,服务器上的 GET 请求将是(假设uid=1f3rd)

G-1。GET /WebDir/Download.php
操作:返回setup.exe并更改 -url
G-2。GET /WebDir/Application/setup.exe/1f3rd/MyApp.Application
操作:重定向、验证用户、更改 URL、重新签名并返回文件
G-3。GET /WebDir/Application/setup.exe/MyApp.Application?user=1f3rd
操作:重定向、验证用户并返回文件
G-4。GET /WebDir/Application/1f3rd/Application Files/MyApp_1_0_0_0/MyApp.exe.manifest
行动:重定向、验证用户并返回文件
G-5。GET /WebDir/Application/1f3rd/Application Files/MyApp_1_0_0_0/MyApp.exe.deploy
和其他 .deploy 文件...
操作:重定向、验证用户并返回文件

优点

  1. 当所有请求都uid在 URL 中有效时,应用程序才能成功部署和升级。
  2. 您现在可以识别客户端系统上应用程序的不同实例。您可以跟踪更新历史记录,进行选择性版本升级/降级等等!

缺点

  1. 您将需要一个 Windows 服务器来实现上述内容,因为您需要 mage.exe | 您自己的 .NET 代码签名应用程序和 Msistuff.exe。
  2. 由于您正在对每个文件请求执行验证,因此您可能会遇到一些小的性能问题。您可以选择跳过对 .manifest 和 .deploy 文件请求的验证。
  3. 您必须确保公司证书的适当安全性,该证书将出现在网络服务器上进行签名(如果您自己拥有完整的服务器,则可以将其存储在服务器本地文件系统上。在这种情况下,除非有人闯入机器本身!)

如果您想让我说清楚或详细解释一些事情,请随时询问。如果您对上述内容有修改建议,也请发布。

如果哪天有空我会写一篇详细的CodeProject文章。