基于安全HTML标签(vb.net或c#)的HTML解码没有运气



我花了相当多的时间试图找出处理这个问题的最佳方法。在将不受信任的用户输入的富文本存储到数据库之前,我对它进行HTML编码。

我在多个讨论中来回切换,似乎最安全的方法是:

HTML绝对编码所有内容,并且在将其发送回客户端之前仅基于白/安全列表进行解码。

然而,我也看到强烈建议使用http://htmlagilitypack.codeplex.com/

将用户输入与安全/白名单进行比较。

我读过

:

c# HtmlDecode特定标签

https://eksith.wordpress.com/2011/06/14/whitelist-santize-htmlagilitypack/

实际上,还有其他10个帖子,我很沮丧,因为现在我找不到最好的方法来处理这个问题。

我已经尝试使用正则表达式使用正则表达式替换方法:

For Each tag In AcceptableTags.Split(CChar("|")).ToList()
    pattern = "<" + "s*/?s*" + tag + ".*?" + ">"
    Regex = New Regex(pattern)
    input = Regex.Replace(input, pattern)
Next

这似乎一点也不好用。

是否有人在那里谁有一个行之有效的方法与一个例子实现他们不介意分享?我选c#或者vb.net

取决于你的数据。例如,如果您试图避免在电话号码中使用HTML,那么初始验证的白名单是可以的。另一方面,如果你不能明确说明什么是进的,什么是出的,那么就让它"原始"吧。

在数据库中存储编码数据是非常不可能的。

任何系统,即使是边缘复杂性将有非html客户端,它将不得不提供数据。当您使用HTML客户机时,需要将输出转义为HTML。XML也是如此。类似地,如果您现在决定更喜欢JSON,那么您将对其进行编码。CSV吗?没问题——在你的值周围加上引号(并转义任何引号),以防它们有逗号。在执行SQL时使用参数。明白了吗?

TL;博士;

  • 可以输入白名单
  • 保存特定编码的数据可能是错误的

  • 总是,总是,总是转义适合你的输出

  • 永远不要尝试自己转义-始终使用可信库。

最新更新