如何在 grails 项目的 javascript 文件中编码 AsHtml

How to encodeAsHtml in a javascript file in a grails project

我有一个 grails 项目,其中 UI 主要在 javascript(BackBone.js) 中实现。 简而言之,我有一个包含 javascript 文件的 gsp 文件。 gsp 页面的事件由 Javascript 文件中定义的处理程序处理。

现在我在 javascript 文件中有一些 DOM XSS 违规。 例如。 cell1.innerHTML = '<div name="caCertFileName">' + item.fileName.substring(33) + '</div>';

现在我无法理解如何在 javascript 文件中使用 encodeAsHTML / encodeAsJavascript 函数。 我需要一个简短的例子来解决这个问题。

您可以定义 JavaScript 函数来进行 html 转义,并像这样使用它:

cell1.innerHTML = '<div name="caCertFileName">' + encodeHtml(item.fileName.substring(33)) + '</div>';

使用像 encodeHtml 这样的函数将 < 这样的字符转换为 &lt;,并且数据被插入标签之间而不是标签内部,这可以工作。

参见:Can I escape html special chars in javascript? 实现。

尽管如此,您最好还是避免使用 innerHTML,并使用 DOM 操作函数。以 jQuery 为例,你可以这样写:

$(cell1).append($("<div>")
    .attr("name", "caCertFileName")
    .text(item.fileName.substring(33)));

这会在 HTML 结构和用户数据之间保持分离。