【问题标题】:ASP .NET MVC3 ViewBag sanitizing stringASP .NET MVC3 ViewBag 清理字符串
【发布时间】:2011-09-29 17:33:35
【问题描述】:

因此,我需要根据数据库中的数据将视图中的字符串数组传递给 JavaScript 函数。所以我在控制器中有这段代码:

        string top_six_string = "[";
        foreach (ObjectModel om in collection)
        {
            myProject.Models.BlobFile file = null;
            if (om.BlobFile != null)
            {
                file = om.BlobFile;
            }
            else if (om.BlobFiles.Count != 0) 
            {
                file = om.BlobFiles.First();
            }
            if (file != null)
            {
                top_six_string += " \"" + file.BlobFileID + "\",";
            }
        }
        top_six_string = top_six_string.TrimEnd(',');
        top_six_string += "]";
        ViewBag.TopSixList = top_six_string;

现在,我不太明白为什么我们同时拥有 BlobFile 字段和 BlobFiles 集合,但这不是重点。关键是,调试表明我准确地得到了我想要的字符串(形式为[“25”,“21”,“61”,“59”])。

但是在运行 JavaScript 时,我收到了令人困惑的错误“意外字符 &”,并且在 Chrome 中查看了一些源代码后,我了解到字符串看起来像这样:

[ "25", "21", "61", "59"]

所以我的假设是 ViewBag 正在清理它在 HTML 中为 display 传递的字符串,但显然这不是我现在关心的问题。我的假设是否正确?有没有另一种方式来传递视图这个信息?有没有办法可以在之后将字符串强制转换回引号?

【问题讨论】:

  • 不先清理它们就将原始字符串发送到您的站点是个坏主意。恶意用户可以使用您的 JavaScript 发送他自己的数据,然后入侵您的网站。小心。

标签: c# javascript html asp.net-mvc


【解决方案1】:

问题很可能是当您在 View 中输出 ViewBag 的内容时。默认情况下,Html 助手会清理输出以帮助防止注入攻击。

在你的视图中输出值时你想要的是这个:@Html.Raw(ViewBag.TopSixList)

【讨论】:

  • @chris-dale - 太棒了!不要忘记将其标记为已回答,以便其他人可以找到它。 :)
【解决方案2】:

由于程序员几乎不使用 MVC3,谷歌也为 Asp 核心显示了这个页面

在 ASP.Net Core 中更改此行:

ViewBag.TopSixList = top_six_string;

ViewBag.TopSixList = new HtmlString(top_six_string);

如果 HtmlString 不可访问,则添加 using Microsoft.AspNetCore.Html;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-22
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多