如何使用密码保护 ClickOnce 部署的应用程序?我是否必须更改 Web 的 IIS 设置,还是有办法以编程方式进行?我正在使用 Visual Studio 2005 (.NET 2.0)。
如果我必须使用 Web 凭据,是否还可以自动更新应用程序?
如果您能提供一些示例代码或管理 IIS 的详细说明,那就太好了。
谢谢!
如何使用密码保护 ClickOnce 部署的应用程序?我是否必须更改 Web 的 IIS 设置,还是有办法以编程方式进行?我正在使用 Visual Studio 2005 (.NET 2.0)。
如果我必须使用 Web 凭据,是否还可以自动更新应用程序?
如果您能提供一些示例代码或管理 IIS 的详细说明,那就太好了。
谢谢!
我自己在这篇 MSDN 文章中找到了一个可能的解决方案:ClickOnce 部署和安全性。
如果要控制每个用户可以访问哪些部署,则不应启用对部署在 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 应用程序。
我不确定它是否可以完成。我可能是错的,但我认为这不会奏效。除此之外,即使您的用户输入他们的凭据来获取 .application,运行时也会进行单独的下载,为此它需要匿名访问。
如果您非常想保护客户端,您可能必须想出一种不同的部署方式。
我见过的唯一解决方案是:单击一次表单验证
We've run into the same problem with trying to secure an application. The one problem with the solution above that I've noticed is that the cookie information is in the URL, which means if someone theoretically intercepted the URL, they could use it to also download the application. Other than that, it seems like a viable solution.
ClickOnce 安装程序只是位于您的 Web 服务器上的几个安装程序文件,对吗?因此,您可以对这些文件实施某种目录安全性。我相信你可以在几个不同的层面上做到这一点;例如 IIS 权限或(如果您的用户在您的域中)NTFS 权限。
此外,应该能够以编程方式设置 IIS 权限(实际上是什么?)。