【发布时间】:2011-06-19 23:20:03
【问题描述】:
我的网站上有一个指向 Visual Studio 生成的标准发布页面的链接。我担心的是,如果有人找到该页面的 URL,他们可以下载我的软件。当然,我可以用密码保护带有链接的页面,但它仍然不能保护下载 URL。上传后有什么方法可以保护点击吗?我环顾四周,似乎我被困在这个意义上。
【问题讨论】:
标签: deployment passwords clickonce
我的网站上有一个指向 Visual Studio 生成的标准发布页面的链接。我担心的是,如果有人找到该页面的 URL,他们可以下载我的软件。当然,我可以用密码保护带有链接的页面,但它仍然不能保护下载 URL。上传后有什么方法可以保护点击吗?我环顾四周,似乎我被困在这个意义上。
【问题讨论】:
标签: deployment passwords clickonce
公共 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 服务器上执行的操作:
/WebDir/Download.phpDownload.php 验证用户身份后,您必须从您的代码中发送setup.exe(可以在PHP 中使用readfile() 来完成)给用户。但是,问题是引导程序 (setup.exe) 在安装后会执行 GET 请求 [G-2]。现在不要忘记,您必须验证此文件请求。所以基本上你在返回文件之前将"setup.exe -url" 属性更改为包含uid。例如:将其更改为/WebDir/uid/MyApp.Application [G-2]。您可以使用 MsiStuff.exe 更改引导程序的 URL 属性。.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 文件 ...
操作:重定向、验证用户并返回文件
uid 时,才能成功部署和升级应用程序。如果您想让我说清楚或详细解释,请随时提出。如果您对上述内容有修改建议,也请发布。
如果有一天我有空的话,我会写一篇详细的 CodeProject 文章。
【讨论】: