【问题标题】:C#: Sanitize XML text values with XmlTextWriter?C#:使用 XmlTextWriter 清理 XML 文本值?
【发布时间】:2009-07-24 05:16:30
【问题描述】:

我正在使用XmlTextWriter 来序列化和保留我的一些数据。我序列化的几个字段基于用户输入(例如用户名)。今天我使用XmlTextWriterWriteElementString方法。

我的问题是:WriteElementString的第二个参数是要写入的文本值。如何在写作前对其进行消毒?

示例代码:

XmlTextWriter writer = new XmlTextWriter("filename.xml", null);

writer.WriteStartElement("User");
writer.WriteElementString("Username", inputUserName);
writer.WriteElementString("Email", inputEmail);
writer.WriteEndElement();

writer.Close();

变量inputUserNameinputEmail 是用户输入的,我想在编写之前对其进行清理/转义。

实现这一目标的最佳方法是什么?

【问题讨论】:

    标签: c# xml escaping sanitization xmltextwriter


    【解决方案1】:

    你究竟需要什么才能逃离那里? WriteElementString 将完成 XML 所需的所有转义(即 & -> &< -> < 等)

    【讨论】:

    • 那么 WriteElementString 是完全安全的吗? (你说的有道理,我只是不知道是这样)
    • 从某种意义上说,它是“安全的”,它保证输出将是有效的 XML,并且当你读回它时,你会得到相同的字符串。
    【解决方案2】:

    您可以将这些值保护为CDATA,这将是您可以使用 xml 执行的最安全的操作。

    在此之前,您应该通过RegEx 或任何其他验证来检查这些值。

    【讨论】:

    • 为什么投反对票? CDATA 是让您的 XML 有效并包含您希望的所有内容的最安全方法?
    • CDATA 根本不重要。这只是一种无需转义即可编写文本的方法。 OP 使用的代码将正确地转义所有内容。
    • 写成CDATA不会被转义,但是可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 2010-09-13
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    相关资源
    最近更新 更多