在将字符串添加到 XML 之前对其进行清理吗?

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 方法是否足以满足此目的?

Phy*_*sis 5

由于您正在生成 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)