Tag: security

在对C#.NET 3.5服务器进行DCOM调用时,如何可靠地检查客户端身份?

我有一个旧的Win32 C ++ DCOM服务器,我正在重写使用C#.NET 3.5。 客户端应用程序位于远程Windows XP计算机上,也是用C ++编写的。 这些客户端必须保持不变,因此我必须在新的.NET对象上实现接口。 这已经完成,并且正在成功地实现接口,并且正确地从旧客户端到新.NET对象进行所有调用。 但是,我在从DCOM客户端获取调用用户的身份时遇到问题。 为了尝试识别发起DCOM呼叫的用户,我在服务器上有以下代码…… [DllImport(“ole32.dll”)] static extern int CoImpersonateClient(); [DllImport(“ole32.dll”)] static extern int CoRevertToSelf(); private string CallingUser { get { string sCallingUser = null; if (CoImpersonateClient() == 0) { WindowsPrincipal wp = System.Threading.Thread.CurrentPrincipal as WindowsPrincipal; if (wp != null) { WindowsIdentity wi = wp.Identity as WindowsIdentity; if […]

CredRead()无法跨登录会话工作

我按照这个答案使用Credential Manager API。 引用相关代码段: public static Credential ReadCredential(string applicationName) { IntPtr nCredPtr; bool read = CredRead(applicationName, CredentialType.Generic, 0, out nCredPtr); if (read) { using (CriticalCredentialHandle critCred = new CriticalCredentialHandle(nCredPtr)) { CREDENTIAL cred = critCred.GetCredential(); return ReadCredential(cred); } } return null; } 它工作得很好,除了当我注销我的Windows帐户然后再次登录时,CredRead()返回false, Marshal.GetLastWin32Error()给我1168或ERROR_NOT_FOUND 。 为什么会这样? 凭据管理API是仅适用于当前会话,还是我做错了什么? 编辑 : 此问题下面的评论说: 凭据管理API的文档似乎表明这些凭据与登录会话相关联。 也许LogonUser会导致新的登录会话,因此凭据不存在。 但是,我还没有发现任何证据表明凭据管理是特定于会话的。 我认为如果是这样的话就没用了。 编辑2 :仅为记录,如果您需要获取指示CredRead()失败原因的错误号,请检查本文中的ReadCred()方法。

如何在ASP.NET中保护AJAX请求?

我正在开发一个应用程序,我在其中显示网格中的产品。 在网格中有一个列具有禁用/启用图标,点击该图标后,我通过AJAX向我的页面manageProduct.aspx发出请求,以启用/禁用该特定产品。 在我的ajax请求中,我将productID作为参数传递,因此最终的ajax查询为as http://example.com/manageProduct.aspx?id=234 现在,如果有人(专业黑客或网络开发人员)可以获得此URL(很容易从我的javascript文件中获取),那么他可以创建一个将作为循环运行的脚本并禁用我的所有产品。 所以,我想知道有没有任何机制,技术或方法,如果有人试图直接执行该页面,它将返回错误(正确的消息“你没有被授权或其他东西”)否则如果页面从所需的页面执行,就像我显示产品列表的位置一样,然后它将正确地执行。 基本上我想保护我的AJAX请求,所以没有人可以直接执行它们。 在PHP中: 在php中,我的同事通过检查页面的refrer来保护这个PHP页面。 如下: $back_link = $_SERVER[‘HTTP_REFERER’]; if ($back_link ==”) { echo ‘You are not authorized to execute this page’; } else { //coding } 请告诉我如何在ASP.NET(C#)中使用相同或任何其他不同但安全的技术,我在我的应用程序中使用jQUERY来发出ajax请求。 谢谢

C#Windows安全中心设置

我想在Windows中禁用Action Center消息。 我知道注册表在哪里保存这些检查的值,但这些是特定于机器的。 我知道我可以禁用完整的服务。 但我不想禁用该服务,我只想不显示通知/警报/消息。 要查看这些选项,我说的是goto:cmd.exe – > RunDll32.exe shell32.dll,Control_RunDLL wscui.cpl 将启动安全中心,然后单击“更改操作中心设置”左侧的。 现在我在我的C#项目中引用了“C:\ Windows \ System32 \ wscui.cpl”并添加了 using SecurityCenterAdmin; 我看到我可以创建这个对象了 SecurityCenterAdmin.WscAdmin admin = new WscAdmin(); admin.DoModalSecurityAction(); 但我找不到关于它的参考。 在Google上搜索“WscAdmin msdn”或“SecurityCenterAdmin”不会产生任何结果。 任何提示? 提前致谢。 麦克风

内存堆安全性:字符串垃圾收集

我最近一直在为我的公司进行安全代码审查,并使用名为Fortify360的工具。 它将识别代码的许多问题并描述问题。 它提出的一个有趣的问题是我没有找到任何其他信息如下: “存储在内存中的敏感数据(如密码)如果存储在托管的String对象中,可能会泄露。字符串对象没有固定,因此垃圾收集器可以随意重定位这些对象,并在内存中留下几个副本。这些对象是默认情况下没有加密,所以任何能够读取进程内存的人都能看到内容。此外,如果进程’内存被换出到磁盘,则字符串的未加密内容将被写入交换文件。 ,因为String对象是不可变的,所以只能通过CLR垃圾收集器从内存中删除String的值。除非CLR内存不足,否则不需要运行垃圾收集器,因此不能保证何时垃圾将发生收集。如果应用程序崩溃,应用程序的内存转储可能会泄露敏感数据。“ 所有这些我理解为很有道理,而且我对这个问题的研究非常标准。 问题是:我该如何解决这个问题? 假设有问题的类不能从iDisposableinheritance(非常大的应用程序,并且在所讨论的字符串之后很久就需要该类)。 是否有另一种手动内存管理方式来处理特定字符串而不调用垃圾收集器,GC.Collect()?? 提前感谢您的帮助。 亚历克斯

支持样式标记的HTML Sanitizer for .NET

我正在寻找一个在ASP.NET项目中使用的好的HTML清理程序。 问题在于清洁剂必须支持样式属性,该属性可能包含CSS属性,这些属性也必须进行清理。 到目前为止,我还没有找到一个好的产品。 在我咬紧牙关并编写自己的消毒剂之前,我想我可能会试着先看看这里的人们在使用什么。 我看过并拒绝的图书馆: AntiXSS Library(旧版本不安全,新版本带样式标签) AntiSamy .NET(未维护,缺少.NET版本中的必要function,具有过时的依赖性) AjaxControlToolkit中的HTMLAgilityPackSanitizer(转义样式标记) 理想情况是使用基于白名单的清洁程序,该清理程序还根据已知值或正则表列表validation属性值。 有人能指出我正确的方向吗?

更新System.IdentityModel.Tokens.Jwt导致IdentityServer3客户端发生重大更改

希望很容易解决。 微软的System.IdentityModels.Tokens.Jwt软件包昨天在NuGet上从4.0.2.206211351更新到v5.0 。 遗憾的是,这会导致一些“标准” IdentityServer3代码发生重大变化。 即从他们的代码示例中提取,所以我想很多开发人员可能会在未来几天看到这个问题。 原始代码 使用v4.0.2.xxxxxx版本的软件包。 我有 using System.IdentityModel.Tokens; 在命名空间中。 然后在Configuration方法中开始如下: public void Configuration(IAppBuilder app) { AntiForgeryConfig.UniqueClaimTypeIdentifier = “sub”; JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary(); app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = “Cookies” }); app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions { … }; 更新后 更新配置行后: JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary(); 造成问题。 第一件事是,Class显然已经移入System.IdentityModel.Tokens.Jwt命名空间,这个解决起来并不是那么糟糕。 但是,我现在正在获取JwtSecurityTokenHandler.InboundClaimTypeMap上的Object reference required for a non-static field错误Object reference required for […]

为什么wcf不允许没有http模块,通过传输安全模式进行用户名/密码validation

我想使用带有用户名/密码身份validation和ssl的传输安全模式,它适用于Windows身份validation: 我在msdn上发现了一篇文章解释了如何使用传输安全模式进行用户名/密码身份validation,但需要自定义http模块。 我感兴趣的是为什么没有默认的安全模式,如: 如果我需要用户名/密码validation,我可以使用消息安全模式,但如果所有站点都使用https / ssl进行身份validation,那么在wcf中这样做应该不会有问题。 提前致谢。

如何告诉属性使用自定义消息处理程序的基本身份validation?

我正在遵循Badri L.的Pro ASP .NET Web API安全性第8章,试图为将由HTTP / JS客户端使用的Web应用程序实现基本身份validation。 我已将以下身份validation处理程序添加到我的WebAPI项目中: public class AuthenticationHandler : DelegatingHandler { private const string SCHEME = “Basic”; protected async override Task SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { try { // Request Processing var headers = request.Headers; if (headers.Authorization != null && SCHEME.Equals(headers.Authorization.Scheme)) { Encoding encoding = Encoding.GetEncoding(“iso-8859-1”); // etc 当我使用[Authorize]在我的API中修饰方法并在上面的if语句中设置断点时, headers.Authorization在第一次请求时为null。 如果我继续这个中断,if语句再次被命中,这次使用headers.Authorization.Scheme作为“Negotiate”,而不是“Basic”: […]

PasswordVault在多大程度上保护和隔离数据?

我正在考虑使用PasswordVault在我的Windowsapp store应用中存储敏感数据。 我已经做过一些关于检查本课程提供的保护的基础研究。 我编写了两个示例应用程序,第一个将一些数据写入Vault,第二个尝试获取该数据。 即使第二个应用程序使用与用于保存数据的第一个应用程序相同的密钥,它似乎也是如此; 第二个应用程序无法检索该数据。 这很好。 有人知道PasswordVault如何将数据隔离到一个应用程序? 对于另一个应用程序来获取它的应用程序的PasswordVault数据,它是否必须冒充我的应用程序的sid? 为清楚起见: App1做到了这一点 const string VAULT_RESOURCE = “App1 Credentials”; var vault = new PasswordVault(); vault.Add(new PasswordCredential(VAULT_RESOURCE, “Foo”, “Bar”)); App2就是这样做的 var vault = new PasswordVault(); const string VAULT_RESOURCE = “App1 Credentials”; try { var creds = vault.FindAllByResource(VAULT_RESOURCE).FirstOrDefault(); if (creds != null) { UserName = creds.UserName; Password.Text = vault.Retrieve(VAULT_RESOURCE, […]