在C#中通过XML向Web服务发送潜在敏感数据的最佳做法是什么?
如果我知道我将使用的数据是完全无关紧要的,我会倾向于使用XmlSerialization,但序列化需要磁盘访问才能正常工作这一事实让我感到担忧 - 似乎有可能存在敏感数据存储在临时文件中的磁盘上。
所以如果不是XmlSerialization,那么最好的方法是什么?
答案 0 :(得分:3)
使用XmlSerializer时,创建的临时文件仅包含类型信息 - 即表示数据传输对象类型的临时程序集。它们不包含实例化对象本身的实际数据。类型信息可能是敏感的,但可能不是。
上述评论中的链接中提到的威胁是攻击者覆盖这些生成的程序集而不是数据泄露而注入恶意代码的可能性。
实际上,WCF默认使用DataContractSerializer,而不是XmlSerializer。这个链接
http://msdn.microsoft.com/en-us/library/ms733135.aspx
通过在配置文件或代码中创建已知类型列表(强名称类型)来解释如何防止DataContractSerializer加载恶意类型。然后问题仅限于保持配置文件的安全......
我可以现在停止; o)
答案 1 :(得分:2)
使用WCF绑定,例如为TLS配置的WsHttpBinding。
修改
DataContractSerializer
是WCF中使用的默认序列化引擎,不需要像XmlSerializer
这样的临时序列化程序集。
如果您正在访问一般的Web服务,我建议使用WCF代理来执行此操作。如果您只关心序列化并且可能已经为您的请求编写了所有SOAP等,那么您可以毫无顾虑地使用DataContractSerializer
。
那就是说:重要的是要注意临时序列化程序集不存储数据,它们只是加速XML解析的优化。有一个攻击向量来替换程序集,但这需要首先访问服务器,如果您有这种访问权限,则可以通过其他方式检索敏感数据。
答案 2 :(得分:1)
似乎有可能将敏感数据存储在临时文件中的磁盘上。
这可能发生在服务器或客户端上 但无论如何,你的数据将在两端都以未加密的方式出现。
所以你真的必须重新思考这里的安全意味着什么。你想要保护什么样的攻击?