【问题标题】:Password protected .NET ClickOnce deployment?受密码保护的 .NET ClickOnce 部署?
【发布时间】:2010-09-16 18:20:23
【问题描述】:

如何使用密码保护 ClickOnce 部署的应用程序?我是否必须更改 Web 的 IIS 设置,还是有办法以编程方式进行?我正在使用 Visual Studio 2005 (.NET 2.0)。

如果我必须使用网络凭据,是否还可以自动更新应用程序?

如果您能提供一些示例代码或管理 IIS 的详细说明,那就太好了。

谢谢!

【问题讨论】:

    标签: .net winforms security deployment clickonce


    【解决方案1】:

    我自己在这篇 MSDN 文章中找到了一个可能的解决方案:ClickOnce Deployment and Security

    ASP.NET 基于表单的身份验证

    如果您想控制每个用户可以访问哪些部署,您应该不启用匿名访问对部署在 Web 服务器上的 ClickOnce 应用程序。相反,您将允许用户根据用户身份访问您已安装的部署(使用 Windows NT 身份验证)。

    如果您部署到没有 Windows NT 身份验证的环境,解决方案可能是尝试使用 ASP.NET 基于表单的身份验证 对用户进行身份验证。但是,ClickOnce 不支持基于表单的身份验证,因为它使用持久性 cookie。这些存在安全风险,因为它们驻留在 Internet Explorer 缓存中并且可能被黑客入侵。因此,如果您正在部署 ClickOnce 应用程序,则不支持除 Windows NT 身份验证之外的任何身份验证方案。

    传递参数

    如果您必须将参数传递到 ClickOnce 应用程序,则会出现额外的安全考虑。 ClickOnce 使开发人员能够向通过 Web 部署的应用程序提供查询字符串。查询字符串在用于启动应用程序的 URL 末尾采用一系列名称-值对的形式:

    http://servername.adatum.com/WindowsApp1.application?username=joeuser
    

    默认情况下,查询字符串参数被禁用。要启用它们,必须在应用程序的部署清单中设置属性 trustUrlParameters。可以从 Visual Studio 和 MageUI.exe 设置此值。有关如何启用传递查询字符串的详细步骤,请参阅如何:在 ClickOnce 应用程序中检索查询字符串信息。

    如果不检查参数以确保它们是安全的,则永远不应将通过查询字符串检索到的参数传递给数据库或命令行。不安全参数是包含数据库或命令行转义字符的参数,这些字符可能允许恶意用户操纵您的应用程序执行任意命令。

    注意:查询字符串参数是在启动时将参数传递给 ClickOnce 应用程序的唯一方法。您不能从命令行将参数传递给 ClickOnce 应用程序。

    【讨论】:

    • 请问有什么教程吗?
    【解决方案2】:

    我不确定它是否可以完成。我可能是错的,但我认为这不会奏效。除此之外,即使您的用户输入他们的凭据来获取 .application,运行时也会执行单独的下载,为此它需要匿名访问。

    如果您非常想保护客户端,您可能必须想出一种不同的部署方式。

    【讨论】:

      【解决方案3】:

      我见过的唯一解决方案是:Click Once Forms Auth

      我们在尝试保护应用程序时遇到了同样的问题。我注意到上述解决方案的一个问题是 cookie 信息在 URL 中,这意味着如果理论上有人截获了 URL,他们可以使用它来下载应用程序。除此之外,这似乎是一个可行的解决方案。

      【讨论】:

      • 我也花了一些时间寻找解决方案,我也找到了那个 CodeProject 解决方案。我今天刚刚成功完成了一个简单的、不受限制的(匿名身份验证)ClickOnce 部署的测试。现在我知道我可以部署一个不受限制的版本,我将尝试组合一个解决方案(并可能测试 CodeProject 解决方案)。我会重新访问并告诉你进展如何。
      • 经过一些繁琐的工作,我不再确定这个 CodeProject 解决方案是否适用于 .exe 安装程序文件。他们过程中的一个步骤是修改初始的.xbap 文件(XAML 浏览器应用程序)——这不是太难的任务,因为它只是 XML,但我不确定如何处理.exe 文件。我将对 nonce 密码学 进行更多调查,如果我想出一些有用的东西,我会重新审视这篇文章。
      【解决方案4】:

      ClickOnce 安装程序只是位于您的 Web 服务器上的几个安装程序文件,对吗?因此,您可以对这些文件实施某种目录安全性。我相信你可以在几个不同的层面上做到这一点;例如 IIS 权限或(如果您的用户在您的域中)NTFS 权限。

      此外,IIS 权限(实际上是什么?)应该能够以编程方式设置。

      【讨论】:

      • 感谢您的回答。也许我不是那么清楚。我知道我可以设置一些目录安全设置。但是我如何告诉 ClickOnce 在我的应用程序中使用凭据?
      猜你喜欢
      • 1970-01-01
      • 2011-12-23
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 2013-03-02
      • 2015-11-15
      相关资源
      最近更新 更多