Security mvc4中的加密与解密
假设我有一个表单,人们在其中输入信息,如信用卡号码和asp.net MVC 4中的其他敏感信息。我有一个模型类,它将有实体对象,视图将呈现适当的文本框或编辑器来输入这些信息。然后,当用户单击submit按钮时,将调用action方法并捕获信息并发送到服务器进行存储。我想在数据来自客户端时对数据进行加密,以便对其进行保护?怎么做 我知道如果我在控制器类中使用[RequiresHttps]属性,它将使用服务器中安装的证书建立安全连接?你能解释一下这是怎么回事吗 另外,以安全的方式将数据从客户端发送到服务器的最佳方式是什么?还有其他更简单的技术吗?你能解释一下加密和解密是如何解决这个问题的吗 提前谢谢。顺便说一句,我是这项技术的新手Security mvc4中的加密与解密,security,asp.net-mvc-4,Security,Asp.net Mvc 4,假设我有一个表单,人们在其中输入信息,如信用卡号码和asp.net MVC 4中的其他敏感信息。我有一个模型类,它将有实体对象,视图将呈现适当的文本框或编辑器来输入这些信息。然后,当用户单击submit按钮时,将调用action方法并捕获信息并发送到服务器进行存储。我想在数据来自客户端时对数据进行加密,以便对其进行保护?怎么做 我知道如果我在控制器类中使用[RequiresHttps]属性,它将使用服务器中安装的证书建立安全连接?你能解释一下这是怎么回事吗 另外,以安全的方式将数据从客户端发送到
谢谢您需要做的第一件事是安装来自受信任机构(如VeriSign、GeoTrust、Thawte等)的SSL证书。。。这将保护客户端和服务器之间的通信。你可以在维基百科上阅读更多关于HTTPS的信息 然而,这不会给你安全感。您需要从网络级别确保您的web服务器是安全的,这将包括确保服务器本身有防火墙和正确的安全过程。作为一名web开发人员,您最值得信赖的人将是您公司的网络安全管理员(我认为所有开发人员都应该学会自己做这件事,这样他们才知道发生了什么) 您仍然需要保护您的应用程序。我的建议是永远不要在系统中存储信用卡号。你这样做只是自找麻烦。例如,如果您将它们存储在数据库中(即使已加密),并且您的应用程序易受SQL注入攻击,则您可能会将所有客户的信用卡号暴露给攻击者。即使是加密的,也不要认为你是安全的,因为你必须记住很多与加密有关的事情,包括但不限于:
他们甚至提供了用代币存储信用卡的机制,并进行自动循环计费。例如Authorize.NET的高级集成方法
public static class lockIt
{
public static string EncryptString(string ClearText)
{
byte[] clearTextBytes = Encoding.UTF8.GetBytes(ClearText);
System.Security.Cryptography.SymmetricAlgorithm rijn = SymmetricAlgorithm.Create();
MemoryStream ms = new MemoryStream();
string key1 = "aaaaaaaaaaaaaaaa";
string key2 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] rgbIV = Encoding.ASCII.GetBytes(key1);
byte[] key = Encoding.ASCII.GetBytes(key2);
CryptoStream cs = new CryptoStream(ms, rijn.CreateEncryptor(key, rgbIV), CryptoStreamMode.Write);
cs.Write(clearTextBytes, 0, clearTextBytes.Length);
cs.Close();
return Convert.ToBase64String(ms.ToArray());
}
public static string DecryptString(string EncryptText)
{
byte[] encryptedTextBytes = Convert.FromBase64String(EncryptText);
MemoryStream ms = new MemoryStream();
System.Security.Cryptography.SymmetricAlgorithm rijn = SymmetricAlgorithm.Create();
string key1 = "aaaaaaaaaaaaaaaa";
string key2 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] rgbIV = Encoding.ASCII.GetBytes(key1);
byte[] key = Encoding.ASCII.GetBytes(key2);
CryptoStream cs = new CryptoStream(ms, rijn.CreateDecryptor(key, rgbIV), CryptoStreamMode.Write);
cs.Write(encryptedTextBytes, 0, encryptedTextBytes.Length);
cs.Close();
return Encoding.UTF8.GetString(ms.ToArray());
}
public static string EnString(string instring)
{
return EncryptString(EncryptString(instring));
}
public static string DeString(string outstring)
{
return DecryptString(DecryptString(outstring));
}
问题是,您需要使用SSL证书来加密所有通信,使用带有安全密钥的数据库加密来加密CC信息和客户数据,并锁定服务器上不必要的端口和访问点,等等,但这还不够。如果您在服务器上以不完全符合PCI的方式存储CC信息,那么如果有泄漏,您可能会被起诉,如果您不熟悉服务器和软件安全以及PCI要求,这是一种真正的可能性。为什么不直接使用Stripe这样的第三方服务呢?