在C#中,如何在允许HTML输入的同时阻止XSS,包括br?

时间:2011-12-23 16:12:38

标签: c# string xss

我一直在使用MS's AntiXSS library一段时间了。最近我决定将我的网站中的textareas更改为纯文本(以前是WYSIWYG),然后在换行符上转换为br。

问题是,MS的AntiXSS库不支持这个...它剥离了br。我不想让用户的条目直接进入我的数据库中取消选中。如果不使用MS AntiXSS库,在允许HTML输入的同时阻止XSS的可靠方法是什么,包括br(在C#中)?

3 个答案:

答案 0 :(得分:1)

您可以为此字段禁用AntiXSS,并直接将用户的输入存储在数据库中。 这样,您就可以在任何输出上呈现此文本,而不仅仅是HTML。

现在,当您想使用ASP MVC Razor在HTML页面上显示此文本时,您可以使用以下内容:

@Html.Encode(Model.MyMultilineTextField).Replace(@"\n", "<br />")

Html.Encode将对文本进行编码,因此不会解释Html标记,并且无法使用XSS。 您可以在Html上添加一个扩展方法,为您进行转换(替换)。您也可以处理\ r。

答案 1 :(得分:0)

是否可以获得AntiXSS输出的副本?如果是这样,请通过AntiXSS运行您的输入,然后进行替换后记并自行存储数据。

答案 2 :(得分:0)

要解决此问题,我决定按原样存储原始HTML,在存储之前对Environment.Newlines执行替换<br />

然后另一方面,当向访问者展示时,我使用MS AntiXSS代码进行清理。不是100%我想做的理想方式,但完成工作。

我在这里做了一些缓存,以确保它在每次请求时都没有通过AntiXSS运行。