Tag: 安全

为什么Asp.Net核心认证方案是强制性的

我非常沮丧的是,在Asp.Net Core中,身份validation方案似乎是强制性的。 我的目标是构建一个API,我不想知道客户端的任何信息。 我已经建立了自定义身份validation和授权,工作正常。 我没有使用身份或cookie。 但是,如果没有有效的身份validation方案,我将无法返回403 Forbid结果,否则会出现以下exception… System.InvalidOperationException:没有配置身份validation处理程序来处理该方案:自动 我的问题是,我是否可以将MVC配置为不使用身份validation方案或创建身份validation方案而不依赖于登录路径或任何路径?

保护Winform页面的最佳方法是什么?

在Web应用程序中,我们定义角色,表单身份validation等以确保安全性,但是什么应该是保护Winform的最佳方法? 实际上我正在制作桌面应用程序,在成功登录后隐藏登录页面并显示DisplayForm就像这样; //On successful login this.Hide() Form newForm = new DisplayForm(); newForm.Show(); 但我不知道这是不是正确的方式? 我希望用户只有在成功登录后才能看到这个DisplayForm 。 有什么指导吗?

代码忽略了PrincipalPermission属性?

我在所有具有PrincipalPermission属性的业务对象上都有一个Delete方法。 例: [PrincipalPermission(SecurityAction.Demand, Role = “Vendor Manager”)] public static bool Delete(Vendor myVendor) { //do work here } 问题是它似乎完全忽略了我的PrincipalPermission。 无论他们扮演什么样的角色,它都可以让任何人通过。 还有其他我忘了做的事吗? 我在Application Startup部分的应用程序的global.asax中添加了以下内容: AppDomain.CurrentDomain.SetPrincipalPolicy(System.Security.Principal.PrincipalPolicy.WindowsPrincipal); 但这也没有任何区别。 我也尝试了以下内容: public static bool Delete(Vendor myVendor) { PrincipalPermission iPerm = new PrincipalPermission(null, “Vendor Manager”); iPerm.Demand(); //do work here } 并且不知道,这个工作得很好!….任何关于它为什么单向工作而不是另一个工作的想法?

WCF数据服务限制返回字段的能力

我正在使用WCF数据服务来提供要从授权客户端使用的数据。 是否可以限制返回哪些字段(或者可能使用查询拦截器删除数据)? 对于一个非常简单的例子,说我有下表: Id Name DateOfBirth 我通过WCF服务公开这个实体,并且它被Kendo UI网格使用。 如果用户是管理员,我只想要返回DateOfBirth字段。 网格配置将反映这一点。 我可以使用Web API来投影这些结果,但我最好还是让它只与一个服务进行通信。 虽然OData允许我在客户端的查询中使用$ select进行投影,但这可能允许恶意用户更改查询并获取他们不应拥有的数据。 我很想知道我是否可以实际限制服务器上暴露的字段而不必使用其他服务或检查$ select是否有效。 谢谢,

如何在代码c#电子邮件客户端中保护密码

我正在为我兄弟的公司建立一个网站。 网站上最重要的元素是邮件function。 访问者可以使用该系统向我的兄弟发送电子邮件,这一点非常重要。 所以我使用了这段代码: message.From = new MailAddress(“someemail@somedomain.com”); message.To.Add(new MailAddress(“emailaddress”)); message.CC.Add(new MailAddress(“emailaddress”)); SmtpClient client = new SmtpClient(“smtp.live.com”, 587); client.EnableSsl = true; client.Credentials = new System.Net.NetworkCredential(“emailaddress”,”password”); client.Send(message); 代码工作正常,但有一个问题:我需要填写我的密码,我不想这样做。 有没有办法使用MD5哈希(或其他一些加密)或其他东西来保护我的密码?

Page.IsPostBack的安全实现?

根据我之前的问题 ,ASP.net的默认Page.IsPostBack实现是否安全(它不是;它可以伪造…… HTTP动词甚至不必是POST!),我在想; 肯定有一个更好的方法来实现它? 我们能否提出一个Page.IsPostBack实现,当它成立时,几乎可以保证表明该页面是一个真正的ASP.net回发? 如果一个人只想进行一次安全检查(比如某些内容是否会根据用户的角色出现),并且只有在我们不处理ASP.net回发时才这样做,这一点很重要。 我对如何执行此操作的第一个想法是在属性中实现检查代码,因此我可以在Page_Load编写类似这样的内容: if (!_isPostBack) { // Do security check if (userIsNotAuthorized) { btnViewReports.Visible = false; btnEditDetails.Visible = false; // etc. } } 有没有办法安全地实现_isPostBack ? 也许在ViewState中存储一些很难或不可能进行简单假冒回传的内容? 随机字符串?

这是散列密码的安全方法吗?

您能告诉我以下是否是安全地散列密码以存储在数据库中的好方法: public string CreateStrongHash(string textToHash) { byte[] salt =System.Text.Encoding.ASCII.GetBytes(“TeStSaLt”); Rfc2898DeriveBytes k1 = new Rfc2898DeriveBytes(textToHash, salt, 1000); var encryptor = SHA512.Create(); var hash = encryptor.ComputeHash(k1.GetBytes(16)); StringBuilder sb = new StringBuilder(); for (int i = 0; i < hash.Length; i++) { sb.Append(hash[i].ToString("x2")); } return sb.ToString(); } 提前谢谢了。

在分隔符处拆分字节数组

我有一个问题,这里的其他问题对我没什么帮助。 我是一名安全学生,我正在尝试为项目编写一个加密器。 对于那些不知道它是什么的人,你可以在这里阅读。 http://www.gamekiller.net/tutorials-guides/17187-tut-making-crypter-vb6-using-rc4.html 无论如何,一个快速的解释,加密器是通过加密程序然后在前面粘贴“存根”(一个解密它的程序)来绕过防病毒的程序。 我分割文件时遇到了一个非常烦人的问题。 最大的烦恼是我必须将加密的可执行文件放入一个字节数组中,因为字符串会杀死我的加密可执行文件中的某些字符,使其无法执行。 更糟糕的是,我仍然必须“拆分”exe,这就是麻烦开始的地方。 存根的基本思想是: 获取当前的exe路径 通过File.ReadAllytes读取所有字节 在分隔符“EVILDELIMITER”处拆分文件 获取最后一个字段(因为那是加密的EXE) 使用RC4解密它 使用RunPE运行。 我有一切工作,除了分裂部分,这是最烦人的。 如何在分隔符处拆分字节数组? 有更简单的方法吗? 这是我到目前为止存根的代码。 public void main() { string outpath = RandomString(8) + “.exe”; byte[] key = { 33, 44, 55, 66, 77 }; string apppath = Assembly.GetEntryAssembly(); byte[] exe = File.ReadAllBytes(apppath); string strseperate = “EVILSEPERATOREVIL”; System.Text.UTF8Encoding encoding = new […]

自定义CodeAccessSecurityAttribute

我创建了以下属性: [Serializable] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)] public class OperationPermissionAttribute : CodeAccessSecurityAttribute { private static PrincipalPermission _revoke = new PrincipalPermission(PermissionState.None); private static PrincipalPermission _allow = new PrincipalPermission(PermissionState.Unrestricted); private string _role; private string _task; private string _operation; public OperationPermissionAttribute(SecurityAction action, string role, string task, string operation) : base(action) { _role = role; […]

在Web主机上存储密码或私钥的最佳方法是什么?

我不是指不必使用的密码(例如我网站上其他用户的密码 – 在这种情况下我真的不需要存储它们。请参阅https://stackoverflow.com/a/ 1054069/939213 。)所以简单地存储哈希不是一种选择。 我指的是将密码存储到SQL数据库以及共享服务器上的软件必须使用的私钥。 我认为没有真正安全的方法来做到这一点。 我只是想知道在这种情况下最好的是什么。 我试图让他们远离黑客(在同一个网络主机上或不在黑客上)。 不是其他有权查看文件的人。 这将是使用它们的ASP.Net代码隐藏。