Deployment 保护单击一次web部署的安装

Deployment 保护单击一次web部署的安装,deployment,passwords,clickonce,Deployment,Passwords,Clickonce,我的网站上有一个指向VisualStudio生成的标准发布页面的链接。我担心的是,如果有人发现该页面的URL,他们可以下载我的软件。当然,我可以用密码保护带有链接的页面,但它仍然不能保护下载URL。是否有任何方法可以确保单击一次上载的安全?我环顾四周,似乎我被困在这个意义上 公共URL是ClickOnce部署中的一个安全问题。但是,如果您的web服务器安装了windows和.NET,则有一个解决方案。告诉我你有没有?我将不得不为LinuxWeb服务器想出另一种解决方案,以防您遇到这种情况 简明的

我的网站上有一个指向VisualStudio生成的标准发布页面的链接。我担心的是,如果有人发现该页面的URL,他们可以下载我的软件。当然,我可以用密码保护带有链接的页面,但它仍然不能保护下载URL。是否有任何方法可以确保单击一次上载的安全?我环顾四周,似乎我被困在这个意义上

公共URL是ClickOnce部署中的一个安全问题。但是,如果您的web服务器安装了windows和.NET,则有一个解决方案。告诉我你有没有?我将不得不为LinuxWeb服务器想出另一种解决方案,以防您遇到这种情况

简明的 首先,关于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 deployment provider URL请求)
G-4
GET/WebDir/Application Files/MyApp_1_0_0/MyApp.exe.manifest
(应用程序清单请求)
G-5
GET/WebDir/Application Files/MyApp_1_0_0/MyApp.exe.deploy

和其他.deploy文件。。。(申请文件请求)

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

目录结构 在
WebDir
中创建一个
“应用程序”
文件夹,并限制对
/WebDir/Application/
的访问。其余一切都可以放在
/WebDir/

文件请求 下面是在windows机器上托管的Apache web服务器上执行的操作:

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


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

  • 使用
    .htaccess
    文件,将[G-2]重写为
    /WebDir/Handler.php?user=uid
    。从
    Handler.php
    ,您可以检查它是否是有效的
    uid
    。如果有效,则必须在部署提供程序URL中包含
    uid
    ,并在部署清单中包含“依赖程序集路径”,这样,如果出现升级请求(它实际上请求部署清单),也可以在那里验证用户。添加
    uid
    以查询字符串参数。例如:将其更改为
    /WebDir/MyApp.application?user=uid
    [G-3]。不要忘记,一旦修改清单,您将不得不放弃清单。使用或编写自己的代码来实现这一点
  • 最后,服务器上的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文件…
    操作:重定向、验证用户并返回文件

    专业人士
  • 只有当所有请求的URL中都有有效的
    uid
    时,应用程序才会成功部署和升级
  • 现在,您可以在客户端系统上识别应用程序的不同实例。您可以跟踪更新历史记录,执行选择性版本升级/降级等操作 缺点
  • 由于需要mage.exe |您自己的-.NET代码签名应用程序和Msistuff.exe,因此需要windows服务器来实现上述功能
  • 由于您正在对每个文件请求执行验证,因此可能会出现一些小的性能问题。您可以选择跳过对.manifest和.deploy文件请求的验证
  • 您必须确保web服务器上用于签名的公司证书具有适当的安全性(如果您拥有完整的服务器,则可以将其存储在服务器本地文件系统中。在这种情况下,除非有人闯入机器本身,否则就可以了!)
  • 如果你想让我把事情说清楚或详细解释,请尽管问。如果你有修改上述内容的建议,也可以发布

    如果有空,我会写一篇详细的代码项目文章