Tag: security

如何加密JWT安全令牌?

我需要通过签名和加密来保护我的网络令牌。 我编写了下一行代码: var tokenHandler = new JwtSecurityTokenHandler(); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, owner.Name), new Claim(ClaimTypes.Role, owner.RoleClaimType), new Claim(“custom claim type”, “custom content”) }), TokenIssuerName = “self”, AppliesToAddress = “http://www.example.com”, Lifetime = new Lifetime(now, now.AddSeconds(60 * 3)), EncryptingCredentials = new X509EncryptingCredentials(new X509Certificate2(cert)), SigningCredentials = new X509SigningCredentials(cert1) }; var […]

基于当前用户的“角色”动态构建ASP.NET MVC主页面菜单

我见过一些类似的问题,但没有一个看起来像我正在尝试做的事情。 这是我当前的实施没有任何安全性: 这很好,以上工作。 我在Actions for CController和DController上设置[授权]属性以防止未经授权的访问 – 但是我想从没有正确角色的用户的菜单中删除这些项目,因为当他们看到它并点击时在它上面它告诉他们他们没有许可,他们会想要它。 如果他们不知道它在那里,那对所有参与者来说都更好…… 这样的事情最终是我想要达到的目标,但我正在寻找更多MVC风味的方法,其中“视图”是“愚蠢的”:

有关Data Protection API(DPAPI)的信息

我目前正在编写ac #mvc web应用程序,其中从用户获取密码并存储在数据库中 – sql server。 我需要一种散列密码的方法。 建议使用Data Protection API(DPAPI)。 我不喜欢它和互联网上的研究,很少有信息存在。 任何人都可以指出方向获取更多信息吗? 或者给我一个如何设置和使用它的概述等。

在SQL Server中动态创建SQL vs参数

如果我要从表中选择一行,我基本上有两个选项,或者像这样 int key = some_number_derived_from_a_dropdown_or_whatever SqlCommand cmd = new SqlCommand(“select * from table where primary_key = ” + key.ToString()); 或使用参数 SqlCommand cmd = new SqlCommand(“select * from table where primary_key = @pk”); SqlParameter param = new SqlParameter(); param.ParameterName = “@pk”; param.Value = some_number_derived_from_a_dropdown_or_whatever; cmd.Parameters.Add(param); 现在,我知道第一种方法因为可能的sql注入攻击而不受欢迎,但在这种情况下,参数是一个整数,因此不应该真正注入恶意代码。 我的问题是:您是否在生产代码中使用选项1,因为您认为使用安全是因为易于使用和控制插入的参数(如上所述,或者参数是否在代码中创建)? 或者你总是使用参数,不管是什么? 参数100%注射安全吗?

在Windows 7上调用IPrincipal.IsInRole

我们在应用程序中使用NTLM auth来确定用户是否可以执行某些操作。 我们使用当前Windows登录的IPrincipal (在WinForms应用程序中),调用IsInRole来检查特定的组成员身份。 要检查用户是否是计算机上的本地管理员,我们使用: AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); … bool allowed = Thread.CurrentPrincipal.IsInRole(@”Builtin\Administrators”) 如果当前用户是Administrator用户,或者是Builtin\Administrators组成员的另一个用户,则Builtin\Administrators 。 在我们对Windows 7的测试中,我们发现它不再按预期工作。 Administrator用户仍然可以正常工作,但作为Builtin\Administrators组成员的任何其他用户对IsInRole调用返回false。 什么可能导致这种差异? 我有一种直觉,默认设置在某处发生了变化(可能在gpedit中),但找不到任何看起来像罪魁祸首的东西。

在外部JavaScript文件中插入动态值的安全方法

我正在使用以下策略实现内容安全策略标头 Content-Security-Policy: default-src ‘self’ 所以需要避免内联脚本,因为它不会执行。 但是,在MVC应用程序中,某些function(如编辑器模板)使用内联脚本。 例如tinymce_jquery_full.cshtml包含 $(function() { $(‘#@ViewData.TemplateInfo.GetFullHtmlFieldName(string.Empty)’).tinymce({ … 使用CSP时,在外部.js文件中包含动态值的好方法是什么? 我目前的想法是两种方式之一: C#生成的JavaScript 类似于JSONP的工作方式,除了在URL中我没有指定回调 – 我只是传递动态值。 在每个需要动态JavaScript的文件中,我都包含一个链接,例如 它命中ScriptController的Foo动作,它返回插入动态值bar text/javascript类型的内容。 这对我来说是一种可靠的方式,如果有点笨拙,它首先会破坏使用CSP的一些优点(几乎很容易意外地插入未编码的文本并导致XSS,因为它没有CSP)。 隐藏的表单字段 动态值将插入页面: 并在外部JavaScript文件中查找这些值: $(‘#url’).val(); 这将有效,但如果页面上有多个动态控件或者有多个相同类型的控件,则可能会很麻烦。 问题是如何有效地将每个.js脚本与其隐藏字段匹配。 有没有更好的解决方案,还是有任何我可以使用的现成框架?

开发与Web表单应用程序一致的自定义身份validation和授权系统

我正在创建一个新的ASP.NET MVC 4应用程序(实际上是我的第一个MVC应用程序),它是我以前的ASP.NET Web表单应用程序的一部分。 我从未在任何项目中使用ASP.NET内置身份validation方法。 这个新的MVC 4应用程序将在以前的应用程序的子域上发布。 登录将从之前的应用程序完成。 如果没有登录,应该从MVC应用程序提供返回URL以返回当前页面。但是,新用户注册,帐户恢复选项已经在以前的Web表单应用程序中开发,我不想在我的新MVC中复制它们应用。 如果成功登录,将从Web表单应用程序发出带有令牌编号的cookie token ,该令牌将共享给所有域,如*.maindomain.com 。 现在我想将自己的令牌validation方法与ASP.NET内置方法合并,以便我可以在新的MVC应用程序中使用Authorize和其他与安全相关的选项。 在我之前的应用程序中,我以下列方式开发了自定义用户validation系统。 首先,我有以下相关的SQL Server表 和以下课程 public class Token { public static uint GenerateToken(string userEmail, string password, bool isPersistent) { // this static function generates a uint type unique token number // and put this in the cookie “token” using HttpContext.Current.Response object. // […]

在.Net 4.5中检查Active Directory组成员身份

我有一个使用Windows身份validation的ASP.Net MVC应用程序,我正在检查组成员身份以确保控制器操作的安全性。 听起来很简单,我发现没有其他问题可以解决我遇到的问题。 第一次尝试:[授权] 经典的方法是简单地在控制器操作上打一个Authorize数据注释属性并转到城镇: [Authorize(Roles = @”domain\groupName1″)] 没有骰子。 我被提示输入凭据。 通常这意味着Windows身份validation配置有问题,但设置正常:(1) HttpContext.User是一个WindowsPrincipal对象,(2)我确认另一个已知的组名有效。 第二次尝试:IsInRole() 下一步是采用更老式的路线并使用IPrincipal.IsInRole() ,再次,一个返回false ,另一个返回true 。 var wp = (WindowsPrincipal)User; // false var inGroup1 = wp.IsInRole(@”domain\groupName1″); // true var inGroup2 = wp.IsInRole(@”domain\groupName2″); 难倒…所以我打了我的系统书呆子,我们仔细检查一切。 用户是群组成员? 是。 组名拼写正确吗? 是。 下一步是阻止SID。 第三次尝试:搜索身份的群集 在我的控制器中,我检查WindowsIdentity并查看组集合中的麻烦组的SID: var wi = (WindowsIdentity)wp.Identity; var group = wi.Groups.SingleOrDefault(g => g.Value == “group1-sidValue”); group变量是SecurityIdentifier对象。 因为它不是null,我们可以确定当前用户是[Authorize()]或IsInRole()尝试无法确认的组的成员。 […]

C#AES算法何时符合FIPS标准?

现在,我可以让RijndaelManaged算法在打开FIPS的本地安全设置的计算机上工作的唯一方法就是禁用它 。 它是一台政府计算机,所以我不确定它会如何飞行。 我在msdn博客网站上看过他们说他们正在开发AES FIPS兼容版本的post,但我似乎无法找到更多。 有谁知道这可能发生的时间?

如何使用客户端证书在Web API中进行身份validation和授权

我正在尝试使用客户端证书来使用Web API对设备进行身份validation和授权,并开发了一个简单的概念certificate来解决潜在解决方案的问题。 我遇到的问题是Web应用程序没有收到客户端证书。 一些人报告了这个问题, 包括在本问答中 ,但他们都没有答案。 我希望提供更多细节来重振这个问题,并希望得到我的问题的答案。 我对其他解决方案持开放态度。 主要要求是用C#编写的独立进程可以调用Web API并使用客户端证书进行身份validation。 此POC中的Web API非常简单,只返回单个值。 它使用一个属性来validation是否使用了HTTPS以及是否存在客户端证书。 public class SecureController : ApiController { [RequireHttps] public string Get(int id) { return “value”; } } 以下是RequireHttpsAttribute的代码: public class RequireHttpsAttribute : AuthorizationFilterAttribute { public override void OnAuthorization(HttpActionContext actionContext) { if (actionContext.Request.RequestUri.Scheme != Uri.UriSchemeHttps) { actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden) { ReasonPhrase = “HTTPS […]