当数据包含<script> </script>时,knockout不起作用

时间:2013-03-31 07:25:27

标签: knockout.js

我有以下淘汰赛定义:

FunctionVm = function (initialData) {

var self = this;

self.Dto = {
    Name: ko.observable(initialData.Dto.Name)
    };
};

Html很简单:

<input data-bind="value:Dto.Name" id="Dto_Name" type="text"></input>

我这样叫淘汰赛:

    var initialData = ...
var functionVm = new FunctionVm(initialData);
ko.applyBindings(functionVm);

现在,如果initialData = {&#34; Dto&#34;:{&#34; Name&#34;:&#34; Home&#39;}};没关系。

但是如果

   initialData = {"Dto":{"Name":"<script>alert(1)</script>"}};

淘汰赛根本没有显示任何内容。

你能帮我吗?

2 个答案:

答案 0 :(得分:2)

那是因为</script>结束标记结束了包含代码的脚本标记,因此由于未终止的字符串文字而导致语法错误。

将标签分成两个字符串:

initialData = {"Dto":{"Name":"<script>alert(1)</scr"+"ipt>"}};

答案 1 :(得分:0)

您可以在将HTML插入“名称”之前通过转义HTML来验证数据吗? PHP和jQuery都具有此任务的功能。不要相信用户输入:)