如何对 JavaScript 字符串进行编码以显示和回发



我有一个MVC应用程序,它在客户端上渲染以下javascript:

var rawData = [{"ID":5317,"Code":"12345","Description":"sometext u003c/= 100"}];

JSON 数据是使用 JavaScriptSerializer 序列化对象,然后通过 Html.Raw(( 帮助程序运行结果的结果。

然后,此数据用于加载挖空视图模型并在悬停时显示弹出窗口。在弹出窗口中,仅显示"描述"属性的"sometext"部分,因为当设置 rawData 变量时字符串将转换为未编码版本(即 \u003c 转换为 <(。

此外,此数据最终会在保存数据时发送回服务器,并且 ASP.NET 验证启动并失败请求,因为它检测到">

我暂时通过向我的挖空视图模型添加一个计算属性来解决此问题,如下所示:

self.DescriptionEncoded = ko.observable('');
self.Description = ko.computed({
             read: function() {
                  return self.DescriptionEncoded ();
             },
             write: function(value) {
                 self.DescriptionEncoded($('<div/>').text(value).html());
             }
         });

通过这种方式,我可以从我的弹出窗口访问转义的属性,并且在序列化我的视图模型(使用 .toJSON(((时,未转义的值不会发送回服务器。

是否有一种更全局的方法来处理这个问题,而不是为每个对象创建计算属性,这些对象可能有一些文本似乎是错误的请求,同时不影响安全性? 我已经考虑了序列化例程的重载/帮助程序,它将接受属性列表以应用查找/替换我认为这必须以类似于我已经完成的方式逐案处理。 至于将数据发送回服务器,我可以覆盖视图模型上的 toJSON(( 方法并删除不需要发回的属性,但这对我的弹出窗口没有帮助。

思潮?

您可以使用

Ajax.JavaScriptStringEncode进行编码。您还可以获取 AntiXSS 库并将其用于编码。

我希望我能很好地理解你的问题。

相关内容

  • 没有找到相关文章

最新更新