保护单击一次Web部署安装

时间:2011-06-19 23:20:03

标签: deployment passwords clickonce

我的网站上有一个链接到Visual Studio生成的标准发布页面。我担心的是,如果有人找到该页面的URL,他们可以下载我的软件。当然,我可以用链接密码保护页面,但它仍然不会保护下载URL。上传后有没有办法保护点击?我环顾四周,似乎我被困在这个意义上。

1 个答案:

答案 0 :(得分:3)

公共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()向用户发送)。但是,安装后的catch是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。如果它有效,则必须在部署提供程序URL中包含uid,在部署清单中包含“Dependent Assemblies Path”,以便在出现升级请求时(它实际上是请求部署清单),您可以验证用户也在那里。添加uid以查询字符串参数。例如:将其更改为/WebDir/MyApp.application?user=uid [G-3]。不要忘记,一旦修改了清单,就必须重新签名。使用Mage或编写自己的代码来执行此操作。
  4. 最后,服务器上的GET请求将是(假设uid = 1f3rd)

    G-1。 GET /WebDir/Download.php操作:返回setup.exe并更改了-url G-2。 GET /WebDir/Application/setup.exe/1f3rd/MyApp.Application
    动作:重定向,验证用户,更改网址,重新签名并返回文件
    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,则应用程序已成功部署并升级
    2. 您现在可以在客户端系统上识别不同的应用程序实例。您可以跟踪更新历史记录,进行选择性版本升级/降级等等!
    3. 缺点

      1. 您需要一台Windows服务器才能实现上述功能,因为您需要mage.exe |你自己的.NET代码签名应用程序和Msistuff.exe。
      2. 由于您要对每个文件请求执行验证,因此可能会遇到轻微的性能问题。您可以选择跳过.manifest和.deploy文件请求的验证。
      3. 您必须确保将在Web服务器上进行签名的公司证书具有适当的安全性(如果您拥有完整的服务器,则可以将其存储在服务器本地文件系统中。在这种情况下,它是除非有人闯入机器,否则很好!)
      4. 如果您希望我做一些明确或详细解释,请随时提出。如果您有修改上述内容的建议,也可以发布。

        如果我有一天有空闲时间,我会写一篇详细的CodeProject文章。