powershell - 从 Powershell 读取 Machine.config 中的加密连接字符串
问题描述
是否可以从 Powershell 脚本中读取 Machine.config 中的加密连接字符串?
由于安全原因,我们正在尝试将硬编码的连接字符串从 PowerShell 脚本移动到 Machine.config
更新:Powershell 脚本应该从 Machine.config 读取连接字符串(通过 aspnet_regiis 加密)并连接到数据库。
解决方案
我不确定 PowerShell 在您的问题中的位置。如果您使用 aspnet_regiis.exe 之类的内置命令来加密配置部分,那么您的 IIS 站点不会意识到该部分已加密。
我不确定在 machine.config 中添加内容如何使应用程序更安全,因为任何透明读取它的内容都适用于该机器上的任何应用程序。
.net 配置的工作方式是你有一个 some.exe,它有一个 some.exe.config 文件。当您部署 some.exe 时,您可以(应该?)包括一个加密敏感部分的步骤。该应用程序仍然只是读取数据,不知道它已被加密。
但同样是应用程序,而不是读取加密值的 powershell。
这是我用来加密/解密部分的脚本的一部分。谨慎使用,因为加密的数据只能在同一台机器(并且可能是同一台操作系统)上解密。YMMV
$appConfig = "your.exe"
$sectionName = "appSettings"
$dataProtectionProvider = "DataProtectionConfigurationProvider"
if (-not (Test-Path $path) ) { throw "Unable to find $($appConfig) $($path)" }
$configuration = [System.Configuration.ConfigurationManager]::OpenExeConfiguration($path)
$section = $configuration.GetSection($sectionName)
if (-not $section.SectionInformation.IsProtected) {
$section.SectionInformation.ProtectSection($dataProtectionProvider)
$section.SectionInformation.ForceSave = $true
$configuration.Save([System.Configuration.ConfigurationSaveMode]::Full)
Write-Information -Message "$($sectionName) in $($appConfig) has been protected from casual users"
}
else {
Write-Information -Message "$($sectionName) in $($appConfig) is already protected"
$section.SectionInformation.UnprotectSection()
$section.SectionInformation.ForceSave = $true
$configuration.Save([System.Configuration.ConfigurationSaveMode]::Full)
Write-Information -Message "$($sectionName) in $($appConfig) protection removed"
}
这是加密/解密配置部分的完整脚本的片段。
推荐阅读
- c# - 构建具有多个连接和未知选择的动态 LINQ 查询
- c# - 从具有属性 (get,set) 的 C# 类编组到 C++ 类,而无需 C# 类的其他实例
- visual-studio - NMake .vcxproj 中预处理器定义中的反斜杠
- python - 移动人的热图
- c++ - 在一个循环中多次放置相同的 QImage
- html - 如何在列表中的字体真棒图标后放置换行符?
- codeigniter - CodeIgniter 安装现在返回一个空白屏幕
- excel - 工作表复制时链接中断的 VBA 问题
- python - 在 Keras 的 Alexnet 模型中使用预训练的权重
- php - 代码当天上传多个文件失败,创建次日上传次月失败