2015-07-10 40 views
0

我有一个字符串,其中包含有效的html标记,如<table><br/>,并显示在包含数据库的工具提示中。安全团队认为这是一个关键问题,因为这可能会允许来自用户的xss攻击,它会插入一个<script> alert(...)c#编码字符串以防止XSS注入(RegEx ??)

在网络上的任何地方,我被告知要使用HttpUtility.HtmlEncode()。问题是这也是编码我的有效标签。

我在找什么,我找不到是RegEx,它允许我过滤xss注入而不剥离我有效的html标签。

是否有这样的事情存在?

+4

您需要在_before_页面的_data_部分上使用'HtmlEncode'来组装输出字符串。尝试着明确输出的哪些部分是格式化的,哪些部分来自数据库,但事实并不顺利。 – HABO

+1

用户提供的文本是否为html?或者你用html包装用户文本? – dman2306

+1

我们通常禁止用户输入HTML。如果我们需要给用户输入格式化指令的能力,那么我们将把MarkDown处理器连接到特定的字段。 –

回答

0

应该很简单,HTML编码整个事情,然后用正则表达式与<table>取代的&lt;table&gt;所有实例等。一个例子正则表达式是"&lt;(\/?(table|span|p|br|tr|td|th|thead|tbody|tfoot|b|i)\s*\\?)&gt;",并以“< \ 1>”

这应该让更换你很近。当然,它不会允许复杂的标签,如<table id=...>等,但您将不得不决定是否这是一个要求。或者使用降价编辑器。

+0

这正是我试图做的,但我决定不去这样,因为我有很多属性到我的标签:( –

+0

为什么你有很多属性(或任何)在用户提供的标签属性? –

+0

听起来像你有一个流程问题,你应该在合并你提供的任何东西之前清理用户提供的部分,你也可以考虑不把HTML放到数据库中,而是在你检索它们后改变占位符。如果需要在以后进行更改,可以轻松地更新/更改您的部分存储将如下所示:'某些用户提供的数据<! - MyControlType1 - >更多用户数据<! - MyControlType2 - >' ,然后从数据库中取出注释。 –