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


我怎么能够 使用密码保护ClickOnce部署的应用程序?我是否必须更改Web的IIS设置,或者有可能以编程方式执行此操作吗?我正在使用Visual Studio 2005(.NET 2.0)。

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

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

谢谢!


9989
2017-10-12 12:50


起源



答案:


我在这篇MSDN文章中找到了一个可能的解决方案: ClickOnce部署和安全性

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应用程序。 


11
2017-10-18 14:26



请问有什么教程吗? - Julian50


答案:


我在这篇MSDN文章中找到了一个可能的解决方案: ClickOnce部署和安全性

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应用程序。 


11
2017-10-18 14:26



请问有什么教程吗? - Julian50


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

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


1
2017-10-12 13:05





我见过的唯一解决方案是: 单击一次表单身份验证

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


1
2018-05-26 20:06



我也花了一些时间寻找解决方案,我也得到了CodeProject解决方案。我今天刚刚完成了一个简单,无限制(匿名身份验证)ClickOnce部署的成功测试。现在我知道我可以部署一个不受限制的版本,我将尝试整合一个解决方案(并可能测试CodeProject解决方案)。我会重温一下,让你知道它是怎么回事。 - Lopsided
经过一些努力,我不再确定这个CodeProject解决方案是否可行 .exe 安装文件。他们的过程中的一步是修改初始 .xbap 文件(XAML浏览器应用程序) - 任务并不困难,因为它只是XML,但我不知道如何处理 .exe 文件。我打算做更多的调查 随机密码学 如果我想出一些有用的东西,我会重新回顾这篇文章。 - Lopsided


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

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


0
2017-10-13 06:30



感谢您的回答。也许我不是那么清楚。我知道我可以设置一些目录安全设置。但是我怎么能告诉ClickOnce 在我的申请中 使用凭证? - splattne