【发布时间】:2014-02-14 21:45:57
【问题描述】:
文本被引入系统,它可以是任何东西,它必须作为文本存储在数据库中(这里有长度限制),并且它必须被转义以保证 XML 安全。
在这种情况下(长度限制为 6):
string theInput = "hell&";
它会被转义到
"hell&"
然后保存到(截断)
"hell&a"
现在的问题是我假设输入被很好地转义了,而事实并非如此。
在这种情况下,所需的输出将是“地狱”,因为我对保存无法正确存储转义输出的内容不感兴趣。
是否有内置函数来实现这一点? (.NET 框架 4),例如;
SecurityElement.Escape(text, maxLen); //this overload does not exist :(
如果没有,有什么建议吗?
编辑:只是为了澄清;输入必须以 XML 安全的方式存储(在 DB 上),因为系统的其他部分需要这种方式(包括不容易更新客户端)
【问题讨论】:
-
我会考虑另一种方法。一种可能性:只存储用户输入的内容。在显示数据之前检索数据时执行转义。如果您必须在存储之前对文本进行转义,请编写一个 CustomValidator,在验证输入时执行转义,如果结果字符串太长,则验证失败。
-
是否有内置函数可以实现这一点?没有。还有问题吗?
-
@L.B "如果没有,有什么建议吗?"
-
@BobKaufman 输入不能被拒绝,因为转义结果太长了,很多客户端都动弹不得
-
@BobKaufman 说得对。在 XML 序列化时执行此操作,而不是在数据库存储时执行此操作。无论如何,数据库不应该知道或关心您如何使用文本。