mik*_*key 2 c# xml asp.net security
考虑以下代码:
private XmlDocument CreateMessage(string dirtyInput)
{
XmlDocument xd = new XmlDocument();
string str = @"<Message><Request>%REQ%</Request><Message>";
str = str.Replace("%REQ%", dirtyInput);
xd.LoadXml(str);
return xd;
}
Run Code Online (Sandbox Code Playgroud)
我应该采取哪些步骤来清理/验证这个 dirtyInput 字符串(它可能来自不受信任的来源)?
编辑:
为了提供更多上下文,此 XML“消息”随后(由我)发送到第三方 Web 服务。我最关心的是减轻有人可能向我传递一个字符串的风险,该字符串可能会利用我的 XML 解析器中的漏洞,甚至可能是目标 [第三方] 端(我向其发送此消息)的解析器中的漏洞。很明显,我可以专注于特殊的 XML 字符,例如 < > & 等 - 我是否还需要担心这些字符的转义/编码形式?可能的欺骗链接中提到的 SecurityElement.Escape 方法是否足以满足此目的?
由于您正在生成 XmlDocument,因此您可以依靠 DOM 方法来为您处理所有转义:
private XmlDocument CreateMessage(string dirtyInput)
{
XmlDocument xd = new XmlDocument();
xd.LoadXml(@"<Message><Request></Request></Message>");
xd["Message"]["Request"].InnerText = dirtyInput;
return xd;
}
Run Code Online (Sandbox Code Playgroud)