Tag: security

检查程序集是否有强名称

是否可以检查动态加载的程序集是否已使用特定的强名称进行签名? 比较AssemblyName.GetPublicKey()方法返回的值是否足够/安全? Assembly loaded = Assembly.LoadFile(path); byte[] evidenceKey = loaded.GetName().GetPublicKey(); if (evidenceKey != null) { byte[] internalKey = Assembly.GetExecutingAssembly().GetName().GetPublicKey(); if (evidenceKey.SequenceEqual(internalKey)) { return extension; } } 这不能被欺骗吗? 我不确定SetPublicKey()方法是否对构建的程序集有任何影响,但即使是MSDN文档也显示了如何在动态生成的程序集(reflection发射)上使用它,这意味着你可以从中提取公钥。托管应用程序并将其注入您自己的程序集并运行恶意代码,如果以上是安全防范,或者我错过了什么? 有更正确和安全的方法吗? 我知道如果相反的情况是这种情况,也就是说,我想要保护程序集只被签名主机调用,那么我可以使用StrongNameIdentityPermission属性标记程序集。

.NET程序集在网络驱动器上以部分信任方式运行,但所有其他组件完全信任

在网络驱动器上运行时,我们的C ++解决方案(调用.NET 4.0程序集)存在一个奇怪的问题。 该解决方案使用NetTcpBinding托管多个WCF服务,其中一个具有非默认绑定配置。 在部分信任下,非默认的NetTcpBinding本身是不可能的(请参阅堆栈溢出问题WCF NetTcpBinding何时需要在客户端上完全信任? ),但解决方案在完全受信任的网络驱动器下运行。 这适用于几台不同的计算机(Windows Vista和Windows 7),但在一台计算机上失败(Windows Vista)并抛出exception, 为“system.serviceModel / bindings”创建配置节处理程序时发生错误:该程序集不允许部分信任的调用方。 (K:\ Somepath \ Testing.exe.Config第6行) 如果解决方案确实在该计算机上的部分信任下运行,那么这个例外将是完全正常的,但它确实在完全信任下运行。 即使我检查完全信任代码也是如此。 我们用其中一台计算机对互联网选项进行了双重检查 – 没有差别。 所有DLL文件和EXE文件都是强名称。 更新:网络驱动器在特定计算机( caspol.exe )上完全信任。 我们应该寻找什么? 如果您需要其他信息,请告诉我。 更新2:我们仍然有这个问题,现在甚至在一台计算机上(Windows 7)。 所以它似乎与操作系统无关。

如何从ASP.NET页面获取当前登录的Windows帐户?

我有一个使用ASP.NET表单身份validation的ASP.NET 3.5应用程序。 我希望能够在页面中编辑数据时获取当前登录到计算机的Windows用户名(不登录到ASP.NET应用程序,但是登录到Windows)。 如果我使用Context.User.Identity.Name.Tostring() ,我会获得登录ASP.NET应用程序的用户名,但我需要Windows帐户名。 System.Security.Principal.WindowsIdentity.GetCurrent().Name.Tostring() 此外,它仅在我从Visual Studio运行网站时有效,但在部署到IIS后,它返回NT AUTHORITY \ SYSTEM 。

http.context.user和thread.currentprincipal之间的区别以及何时使用它们?

我最近遇到了在visual studio 2008下运行asp.net web应用程序的问题。我得到错误’类型未解析成员… customUserPrincipal’。 跟踪各种讨论组时,在为Thread.CurrentPrincipal分配自定义主体时,Visual Studio的Web服务器似乎存在问题。 在我的代码中,我现在使用… HttpContext.Current.User = myCustomPrincipal //Thread.CurrentPrincipal = myCustomPrincipal 我很高兴我把错误排除在外,但它引出了一个问题“这两种设置主体的方法有什么不同?”。 还有其他与差异相关的stackoverflow 问题 ,但他们没有深入了解这两种方法的细节。 我确实找到了一篇引人注目的post,其中有以下宏伟的评论,但没有任何解释来支持他的断言…… 对所有Web(ASPX / ASMX)应用程序使用HttpConext.Current.User。 将Thread.CurrentPrincipal用于所有其他应用程序,如winForms,控制台和Windows服务应用程序。 你们中的任何一位安全/ dot.net专家能否对这个问题有所了解?

如何在Win7和Win8上访问存储的凭据(PasswordVault?)?

我刚刚发现Win8在控制面板上有一个部分,称为用户帐户和家庭安全与Credential Manager 。 我想访问存储在那里的凭据(不是检索密码,而是将它们用作登录的令牌)。 所以,基本上,我想在已经安装的软件上进行搭载。 在本次讨论中已经提出了与解决方案最接近的方法,并不是那么接近。 我在哪里可以找到Windows.Security.Credentials.PasswordVault的程序集? 我一直在谷歌搜索两个小时,但我只获得有关应用程序开发的信息,而我将瞄准桌面。 有没有办法解析对Win7和Win8的预存凭据的访问? 我担心在Win8中对保险库设施进行了大幅改造,使得无法同时定位两个平台。

什么是防止SQL注入的好方法?

我必须为我的OJT公司编写应用程序管理系统。 前端将在C#中完成,后端在SQL中完成。 现在我从未做过这个范围的项目; 在学校我们只有关于SQL的基础课。 不知怎的,我们的老师完全没有讨论SQL注入,我现在才通过在网上阅读它来接触它。 所以无论如何我的问题是:你如何阻止C#中的SQL注入? 我隐约认为可以通过正确屏蔽应用程序的文本字段来完成它,这样它只接受指定格式的输入。 例如:电子邮件文本框的格式应为“example@examplecompany.tld”。 这种方法是否足够? 或者.NET是否有预定义的方法来处理这样的东西? 我可以将filter应用于文本框,因此它只接受电子邮件地址格式或名称文本框,因此它不接受特殊字符吗?