我的网站上有一个链接到Visual Studio生成的标准发布页面。我担心的是,如果有人找到该页面的URL,他们可以下载我的软件。当然,我可以用链接密码保护页面,但它仍然不会保护下载URL。上传后有没有办法保护点击?我环顾四周,似乎我被困在这个意义上。
答案 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服务器上做的事情:
/WebDir/Download.php
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属性。.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或编写自己的代码来执行此操作。最后,服务器上的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文件...
操作:重定向,验证用户并返回文件
uid
,则应用程序已成功部署并升级 。 如果您希望我做一些明确或详细解释,请随时提出。如果您有修改上述内容的建议,也可以发布。
如果我有一天有空闲时间,我会写一篇详细的CodeProject文章。