来自不同用户的 DPAPI ProtectData
DPAPI ProtectData from different users
我使用 DPAPI ProtectData
如下:
var temp = new byte[32]
{
1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,3,
3,3,3,3,3,3,3,3,
4,4,4,4,4,4,4,4
};
ProtectedData.Protect(temp, null, DataProtectionScope.CurrentUser);
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
让我们假设现在 temp 看起来像:
temp = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,....31 };
我想从 .exe 文件和我的 WebService (IIS) 执行此代码。
问题是,如果我 运行 从 exe 中获取代码,则当前用户是 MyDomain/Administrator
,如果我从 WebService 运行 中获取代码,则当前用户是 IIS APPPOOL/MyApp
.
我该如何解决这个问题?
我正在尝试从 WebService
.exe 文件中 运行,如下所示:
Process.Start(@"C:\myexe.exe");
但由于某种原因它没有工作(我可以完全访问我的 iis 应用程序)而且无论如何我认为这不是这种情况的正确解决方案。
注意:出于安全原因,我无法从 DataProtectionScope.LocalMachine
更改为 DataProtectionScope.CurrentUser
如果您不想使用 DataProtectionScope.CurrentUser
,您可以先将其安装为 LocalMachine
。然后,让WebService
解密它,然后使用CurrentUser
重新加密它。确保删除旧值及其所有临时副本。这样,您可以从 LocalMachine
中获取它,并在适当的用户是 运行 时将其锁定。
这仍然使密钥暴露在 LocalMachine
级别,但时间较短 window。
另一个解决方案是使用 LocalMachine
并使用附加的熵特征和两个可执行文件之间共享的秘密。这可能是应用程序已知的混淆值(没有“真正的”安全性),或者是用户提供的密码。用户提供的密码解决方案可能更安全,但也更麻烦且编程开销更大。
如果安装和 WebService
运行 之间的时间 window 很短,第一个解决方案可能比较合适。
问题已解决。
我 运行 来自本地用户的 IIS 应用程序。
您可以通过选择应用程序池并单击“操作”窗格菜单下的“高级设置...”来找到它。 Select 身份,然后单击列出的当前用户旁边的按钮。 Select 自定义账户并点击设置。使用格式 domain\username 作为用户名并输入用户密码。
我使用 DPAPI ProtectData
如下:
var temp = new byte[32]
{
1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,3,
3,3,3,3,3,3,3,3,
4,4,4,4,4,4,4,4
};
ProtectedData.Protect(temp, null, DataProtectionScope.CurrentUser);
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
让我们假设现在 temp 看起来像:
temp = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,....31 };
我想从 .exe 文件和我的 WebService (IIS) 执行此代码。
问题是,如果我 运行 从 exe 中获取代码,则当前用户是 MyDomain/Administrator
,如果我从 WebService 运行 中获取代码,则当前用户是 IIS APPPOOL/MyApp
.
我该如何解决这个问题?
我正在尝试从 WebService
.exe 文件中 运行,如下所示:
Process.Start(@"C:\myexe.exe");
但由于某种原因它没有工作(我可以完全访问我的 iis 应用程序)而且无论如何我认为这不是这种情况的正确解决方案。
注意:出于安全原因,我无法从 DataProtectionScope.LocalMachine
更改为 DataProtectionScope.CurrentUser
如果您不想使用 DataProtectionScope.CurrentUser
,您可以先将其安装为 LocalMachine
。然后,让WebService
解密它,然后使用CurrentUser
重新加密它。确保删除旧值及其所有临时副本。这样,您可以从 LocalMachine
中获取它,并在适当的用户是 运行 时将其锁定。
这仍然使密钥暴露在 LocalMachine
级别,但时间较短 window。
另一个解决方案是使用 LocalMachine
并使用附加的熵特征和两个可执行文件之间共享的秘密。这可能是应用程序已知的混淆值(没有“真正的”安全性),或者是用户提供的密码。用户提供的密码解决方案可能更安全,但也更麻烦且编程开销更大。
如果安装和 WebService
运行 之间的时间 window 很短,第一个解决方案可能比较合适。
问题已解决。
我 运行 来自本地用户的 IIS 应用程序。
您可以通过选择应用程序池并单击“操作”窗格菜单下的“高级设置...”来找到它。 Select 身份,然后单击列出的当前用户旁边的按钮。 Select 自定义账户并点击设置。使用格式 domain\username 作为用户名并输入用户密码。