我使用AntiXSS但我仍然可以破解页面

111*_*110 2 xss asp.net-mvc tinymce antixsslibrary asp.net-mvc-3

我不知道我是否正确行事.
我第一次构建一些东西来防止页面上的攻击.
我将从底部开始:
我有财产:

public string Description {get;set;}
Run Code Online (Sandbox Code Playgroud)

用户可以通过tinyMCE设置它的值

tinyMCE.init({
            mode: "textareas",
            theme: "advanced",
            encoding : "xml"...
Run Code Online (Sandbox Code Playgroud)

在控制器之前我将其保存在数据库中我做:

model.Description = HttpUtility.HtmlDecode(model.Description);
Run Code Online (Sandbox Code Playgroud)

在数据库中我有一个像这样的值:

<p>bla bla bla</p>
Run Code Online (Sandbox Code Playgroud)

我在我的项目中添加了AntiXSS库:

public class AntiXssEncoder : HttpEncoder
    {
        public AntiXssEncoder() { }

        protected override void HtmlEncode(string value, TextWriter output)
        {
            output.Write(Encoder.HtmlEncode(value)); // on breakpoint code always get in here
        }
...
Run Code Online (Sandbox Code Playgroud)

当我从数据库显示数据时,我使用:

@Html.Raw(Model.Place.Description)
Run Code Online (Sandbox Code Playgroud)

它工作正常我只看到文字.没有Html标签.Breaklines工作正常.我可以用粗体,斜体等来设置文本样式.

但如果我进入:

<script>alert(open to attack);</script>
Run Code Online (Sandbox Code Playgroud)


我有警报窗口.
我不明白我需要做些什么才能防止这种情况发生?

Dar*_*rov 5

我在我的项目中添加了AntiXSS库

你在哪里使用它?

确保您不仅添加了AntiXSS,而且实际使用了它:

@Html.Raw(Microsoft.Security.Application.Sanitizer.GetSafeHtmlFragment(Model.Place.Description))
Run Code Online (Sandbox Code Playgroud)

但请记住,AntiXSS库的新版本是有点过于严格,将剥离标签,如<strong><br>哪些可能是不希望的.

作为AntiXSS库的替代方案,您可以使用HTML Agility Pack来完成这项工作.里克斯特尔blogged about a sample implementation.