相关疑难解决方法(0)

我什么时候需要.NET中的SecureString?

我试图了解.NET的SecureString的目的.来自MSDN:

System.String类的一个实例都是不可变的,当不再需要时,不能以编程方式安排垃圾收集; 也就是说,实例在创建后是只读的,并且无法预测实例何时从计算机内存中删除.因此,如果String对象包含敏感信息(如密码,信用卡号或个人数据),则使用该信息后可能会显示该信息,因为您的应用程序无法从计算机内存中删除该数据.

SecureString对象类似于String对象,因为它具有文本值.但是,SecureString对象的值会自动加密,可以修改,直到您的应用程序将其标记为只读,并且可以通过应用程序或.NET Framework垃圾收集器从计算机内存中删除.

初始化实例或修改值时,SecureString实例的值会自动加密.您的应用程序可以呈现实例不可变,并通过调用MakeReadOnly方法防止进一步修改.

自动加密是最大的收益吗?

为什么我不能说:

SecureString password = new SecureString("password");
Run Code Online (Sandbox Code Playgroud)

代替

SecureString pass = new SecureString();
foreach (char c in "password".ToCharArray())
    pass.AppendChar(c);
Run Code Online (Sandbox Code Playgroud)

我错过了SecureString的哪个方面?

.net security encryption

179
推荐指数
8
解决办法
4万
查看次数

运行时使用模拟Windows服务帐户的EF代码第一个连接字符串

  1. 我需要为我的桌面应用程序用于连接到我们的一个内部数据库的每个环境(开发,接受和生产)创建单独的Windows服务帐户.

  2. 已向这些帐户添加了一个全局组以提供访问权限,从而需要使用模拟进行Windows身份验证访问.

  3. 连接字符串数据被加密并存储在网络中,由类库访问以确保安全性.

如果我没有模拟,并使用基础构造函数作为DbContext接受连接字符串的基类,它的工作原理是因为我的个人帐户被分配到同一个全局组.但是,当我将DbContext对象的实例化封装为模拟时,它会在内部异常失败时声明灾难性故障外部异常状态

提供程序未返回ProviderManifest实例.

例如:

Console.WriteLine(Environment.UserName); //This shows me!  So no impersonation yet!
using (new Impersonator("AppUser", "mydomain", "notapassword"))
{
    Console.WriteLine(Environment.UserName); //This shows as AppUSER!  So it works!
    using (BillMarkContext dbContext = new BillMarkContext())
    {
        //Read each bill mark object
        foreach (BillMarkCode code in dbContext.BillMarkCodes.AsEnumerable<BillMarkCode>())
            Console.WriteLine(code.Code);
    }
}

public partial class BillMarkContext : DbContext
{
    private static string _connection = "Integrated Security=True;Persist Security Info=True;Initial Catalog=MyDB;Data Source=DBServer";

    public …
Run Code Online (Sandbox Code Playgroud)

.net c# sql-server entity-framework dbcontext

9
推荐指数
1
解决办法
299
查看次数

如何使用Windows Azure远程桌面调试辅助角色?

我现在已经设置了Windows Azure环境,以便可以使用远程桌面访问我的工作者角色.但是,我不知道目前该怎么办.经过大量挖掘后,我发现一个离线的网站,但在Google的缓存中,提到了从Visual Studio调试器附加到Azure云中运行的辅助角色.但我只有Visual Developer(不是工作室)2010,我已经搜遍了所有,据我所知,没有这样的选项可以连接到远程服务器.我可以毫无错误地将我的项目发布到Azure云,并且我有一个"健康"的工作者角色实例显示为活动并正在运行.

我通过Azure管理门户连接了RDP.登录工作正常,远程桌面窗口出现了.我搜索了很多我能找到的东西,却无法找到我的工人角色.我必须对RDP有错误的印象,因为我希望在登录时看到Worker Role的主要显示形式,就像我在Cloud Emulator中本地调试它一样.但我所看到的只是一个空白的桌面,有一些基本级别的服务器检查和管理例程.我甚至检查了事件查看器中的应用程序相关消息,但没有看到.

所以现在我不知道我的工作者角色是否真的在运行,尽管来自管理门户的看似积极的状态消息,我仍然希望通过Visual Developer附加到我的工作者角色,如果有可能,但我我无法弄清楚如何.

任何有这方面经验的人都可以给我一些关于下一步该做什么的可靠提示,请回复.

更新:我相信我的工作者角色可能正在运行,因为我打开了一个命令窗口并做了一个Netstat并看到它正在侦听正确的端口.但是,这可能只是我的Worker Role shell类启动自定义EXE我将它作为生成的进程启动.我还没有确认我的自定义EXE是否还在运行.

UPDATE-2:刚从命令窗口运行TaskList,列出了自定义EXE.

更新-3:一切正常,因为我刚刚对服务进行了远程测试,所以这不是问题.仍然想知道如何从Visual Developer 2010附加到Worker角色以进行远程调试,并且如果可以在Cloud Emulator中进行本地调试时看到自定义EXE的显示形式.

- roschler

remote-desktop remote-debugging azure azure-worker-roles

7
推荐指数
1
解决办法
8956
查看次数

ASP.Net服务器上的进程无法通过IIS正确运行

我试图在ASP.Net Web应用程序中的上传文件上运行防病毒扫描.我们正在使用Sophos,因此可以访问他们的命令行API sav32cli.在我使用的代码中:

Process proc = new Process();
proc.StartInfo.FileName = @"C:\Program Files (x86)\Sophos\Sophos Anti-Virus\sav32cli.exe";
proc.StartInfo.Arguments = @"-remove -nc " + SavedFile;
proc.StartInfo.Verb = "runas";
proc.Start();
proc.WaitForExit();
int exitCode = proc.ExitCode;
Run Code Online (Sandbox Code Playgroud)

当单步执行代码时,当连接到w3wp开发服务器上的进程时,代码只是从一行跳到另一行似乎什么都不做.从dev服务器上的代码运行时,它会执行预期的扫描文件并删除它是否被视为病毒.

服务器正在运行IIS 8.0,以及.Net Framework 4中内置的应用程序.我已根据这些说明更改了机器配置以允许进程作为SYSTEM帐户运行.https://support.microsoft.com/en-us/kb/317012#%2Fen-us%2Fkb%2F317012

<processModel  userName="SYSTEM" password="AutoGenerate" />
Run Code Online (Sandbox Code Playgroud)

有什么我想念的吗?这种实施的最佳实践是什么?

编辑:调用时,Process返回ExitCode2(错误停止执行),而不是预期的0(扫描工作,没有病毒),或3(扫描工作,发现病毒).

编辑2:根据下面的评论,我将代码更改为:

Process proc = new Process();
proc.StartInfo.FileName = @"C:\Program Files (x86)\Sophos\Sophos Anti-Virus\sav32cli.exe";
proc.StartInfo.Arguments = @"-remove -nc " + SavedFile;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.Start();
StringBuilder output = …
Run Code Online (Sandbox Code Playgroud)

c# asp.net iis antivirus process

7
推荐指数
1
解决办法
1205
查看次数

模拟时使用Process.Start(窗口应用程序)

我试图在Impersonation下使用Process.Start(),我有谷歌几天,我遇到的大多数答案是在ASP.net下,但我正在为Window Application开发,所以我很难找到根本原因.

这是我的冒充代码

     private void impersonateValidUser(string userName, string domain, string password)
        {
            WindowsIdentity tempWindowsIdentity = null;
            IntPtr token = IntPtr.Zero;
            IntPtr tokenDuplicate = IntPtr.Zero;            
            if ( LogonUser( userName, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) != 0)
            {
                if ( DuplicateToken( token, 2, ref tokenDuplicate ) != 0 )
                {
                    tempWindowsIdentity = new WindowsIdentity( tokenDuplicate );
                    mImpersonationContext = tempWindowsIdentity.Impersonate();
                }
            }
        } 
Run Code Online (Sandbox Code Playgroud)

我试图通过我的程序打开文档(没有.exe,如.txt,.doc)

    using (new Impersonator(DomainUserID, Domain, Password))
        Process.Start(filePath);
Run Code Online (Sandbox Code Playgroud)

到目前为止,我能够使用模拟用户检测目录/文件,这对我当前的登录用户来说是不可见的,因为我没有授予它访问权限.但每当我尝试打开文档时,我都会收到错误

    System.ComponentModel.Win32Exception (0x80004005): Access is denied
Run Code Online (Sandbox Code Playgroud)

如果我错了请纠正我,所以在这种情况下,我不认为将UseShellExecute设置为false(还有用户名和密码输入的processStartInfo?)因为它是可执行文件(?),我确实遇到过使用CreateProcessAsUser函数,这个函数似乎也不适用于我的情况,从我为.exe文件读取它的例子.

如果有人能够启发我,我将不胜感激.

更新:模拟类

public class Impersonator …
Run Code Online (Sandbox Code Playgroud)

c# impersonation

6
推荐指数
1
解决办法
2702
查看次数