Asp.net .NET Web应用程序应将其存储在何处';s(非数据库)设置

Asp.net .NET Web应用程序应将其存储在何处';s(非数据库)设置,asp.net,.net,inno-setup,Asp.net,.net,Inno Setup,我正在构建一个将被多次安装的Web应用程序。应用程序需要能够根据请求保存某些设置本身 我有一个安装程序(InnoSetup),但我想非常小心我给Web应用程序的权限 我不能使用数据库 默认安装总是将web.config保留为只读。(最安全) 注册表可能有问题。除非有一组密钥,否则DotNet webapp在默认情况下始终可以写入(IIS_IUSR) 我正在考虑App_数据,但默认权限不再有用,Inno安装程序无法轻松正确修复它: 安全性和易安装性都是大问题 我也不想把我安装的机器弄得一团糟

我正在构建一个将被多次安装的Web应用程序。应用程序需要能够根据请求保存某些设置本身

我有一个安装程序(InnoSetup),但我想非常小心我给Web应用程序的权限

  • 我不能使用数据库
  • 默认安装总是将web.config保留为只读。(最安全)
  • 注册表可能有问题。除非有一组密钥,否则DotNet webapp在默认情况下始终可以写入(IIS_IUSR)
  • 我正在考虑App_数据,但默认权限不再有用,Inno安装程序无法轻松正确修复它:
安全性和易安装性都是大问题

我也不想把我安装的机器弄得一团糟

失败的解决方案是写入注册表的用户部分:

Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\MyCo\\MyApp\\");
var reg = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\MyCo\\MyApp", true);
reg.SetValue("MyValue", (string)dataString, Microsoft.Win32.RegistryValueKind.String);
但我发现,在Server2012和其他可能的服务器上,默认情况下也不允许向HKEY_当前_用户写入内容。服务器错误页面很有帮助,并提供了一些选项,例如显式授予IUSR_{MachineName}显式权限,但这对我来说是不可能的

因此,我的最终解决方案是让安装程序创建一个用户可配置的文件夹,然后将所有用户的读/写权限分配给该文件夹。如果管理员愿意,他们总是可以更多地锁定它


如果有人有更好的选择,请告诉我。

使用InnoSetup,我创建了一个新的向导页面,向用户建议并收集数据文件夹。安装程序然后:

  • 创建了该文件夹并授予所有用户读/写权限
  • 添加了一个HKLM注册表项,告诉Web应用在何处查找文件夹
  • 通知用户应进一步锁定文件夹以防止滥用

您是否可以将其放在web.config appSettings部分,然后使用System.Configuration读取它?这假设应用程序具有写入其web.config的权限。这是不能保证的,通常也不被认为是安全的。所以你是在安装程序运行后从某处获取这个值,然后保存它?如果没有,您可以在安装程序运行后,在配置文件中预加载设置。然后在应用程序的生命周期中不定期地出现。我很好奇。什么样的web应用程序安装在许多计算机上,但不使用数据库?至少他们必须运行某种web服务器,这本身就需要某种程度的安全性。