受密码保护的.NET ClickOnce部署?

时间:2008-10-12 12:50:11

标签: .net winforms security deployment clickonce

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

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

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

谢谢!

4 个答案:

答案 0 :(得分:12)

我在这篇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应用程序。

答案 1 :(得分:1)

我不确定是否可以做到。我可能错了,但我认为这不会奏效。除了其他任何东西,即使你的用户输入他们的凭据来获取.application,运行时也会单独下载,需要匿名访问。

如果您想要如此保护客户端,您可能需要采用不同的方式来部署它。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

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