我试图找到一种解决方案,用于在将敏感信用卡数据传送到支付网关后从内存中清除敏感信用卡数据。大多数支付网关似乎都希望纯文本卡号作为API中的字符串。如果我在C#中使用字符串,我无法清除内存,因为我无法控制内存是否被垃圾回收。来自SDK for Cybersource的以下dto片段说明了我的问题。 注意我试图满足PA-DSS 3.2版要求5.1.6.1编码技术包括如何在内存中处理PAN和/或SAD的文档。我们的审计员指出纯文本帐号不能存储在C#字符串变量中。
我们与其他网关集成,这些网关在字符串变量问题中也有这个PAN。别人怎么处理这个问题?
namespace CyberSource.Clients.SoapServiceReference
{
//
[DebuggerStepThrough]
[DesignerCategory("code")]
[GeneratedCode("System.Xml", "4.0.30319.34234")]
[XmlType(Namespace = "urn:schemas-cybersource-com:transaction-data-1.109")]
public class Card : INotifyPropertyChanged
{
public Card();
[XmlElement(Order = 6)]
public string cardType { get; set; }
//
[XmlElement(Order = 5)]
public string cvNumber { get; set; }
//
[XmlElement(Order = 4)]
public string cvIndicator { get; set; }
//
[XmlElement(DataType = "integer", Order = 3)]
public string expirationYear { get; set; }
//
[XmlElement(DataType = "integer", Order = 2)]
public string expirationMonth { get; set; }
//
[XmlElement(Order = 1)]
public string accountNumber { get; set; }
//
[XmlElement(Order = 0)]
public string fullName { get; set; }
答案 0 :(得分:1)
解决方案是使用SecureString: https://docs.microsoft.com/en-us/dotnet/api/system.security.securestring?view=netframework-4.7.1
关于如何使用它的大量例子:
When would I need a SecureString in .NET?
Memory Heap Security: String garbage collection
C# SecureString Question
答案 1 :(得分:-1)
实际上,你有这样的控制权。 GC.Collect的()。https://msdn.microsoft.com/en-us/library/xe0c2357(v=vs.110).aspx。那里的问题是你应该知道GC如何工作以确保你的对象确实被收集。它在很大程度上取决于你的实现,所以我只能指出这种可能性,而不能提供更多帮助。