【问题标题】:Protecting click once web deployed installations保护网络部署安装后的点击
【发布时间】:2011-06-19 23:20:03
【问题描述】:

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

【问题讨论】:

    标签: deployment passwords clickonce


    【解决方案1】:

    公共 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(.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 查询参数中。

    目录结构

    在您的WebDir 中创建一个"Application" 文件夹并限制对/WebDir/Application/ 的访问。休息一切都可以在里面/WebDir/

    文件请求

    下面是您在 Windows 机器上托管的 Apache Web 服务器上执行的操作:

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

    2. Download.php 验证用户身份后,您必须从您的代码中发送setup.exe(可以在PHP 中使用readfile() 来完成)给用户。但是,问题是引导程序 (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 并在部署清单中包含“依赖程序集路径”,以便如果出现升级请求(它本质上是请求部署清单),您可以在那里验证用户也。查询字符串参数添加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. 只有在所有请求的 URL 中都包含有效的 uid 时,才能成功部署和升级应用程序。
    2. 您现在可以识别客户端系统上的不同应用程序实例。您可以跟踪更新历史、进行选择性版本升级/降级等等!

    缺点

    1. 你需要一个windows服务器来实现上面的,因为你需要mage.exe | your-own-.NET-code-signing-application 和 Msistuff.exe。
    2. 您可能会遇到较小的性能问题,因为您正在对每个文件请求执行验证。您可以选择跳过对 .manifest 和 .deploy 文件请求的验证。
    3. 您必须确保将出现在 Web 服务器上以进行签名的公司证书的适当安全性(如果您拥有完整的服务器,您可以将其存储在服务器本地文件系统中。在这种情况下,它是很好,除非有人闯入机器本身!)

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多