【问题标题】:How to pass libraries through Google CAJA?如何通过 Google CAJA 传递库?
【发布时间】:2016-09-08 07:59:15
【问题描述】:

有谁知道我是否可以配置 Google Caja,这样它就可以让一些确切的库工作而不被清理? 我有自己的 CAJA 服务器和基于 NodeJS 的应用程序。我正在向 Google CAJA 用户传递代码,该代码主要与图表和图形相关,但所有库函数(如 d3js、chart.js)都被 CAJA 阻止。 所有库都通过 Caja 并无错误地连接到用户的文档,但是如果用户请求库的任何功能(例如 d3.select("body").append("svg") ),那么它会显示错误,例如 this * is not a function。有谁知道方法吗?

PS 我知道 URI 策略,但它似乎只控制所有东西,即来自同源域名的东西,即使库通过 uriPolicy 传递,它仍然由 Caja 检查。

【问题讨论】:

  • 你见过 uriPolicy 的缓解属性吗?
  • 嗨!是的,我找到了,不幸的是我无法让它工作。我找不到它的任何文档,我在 caja 本身的源代码中找到了它。如果您能提供一些有关其工作原理的信息,我将不胜感激。

标签: javascript node.js d3.js google-caja


【解决方案1】:

您可以通过 uriPolicy.mitigate 函数将 url 返回到库的预缓解/预哄骗/受信任版本。您可以只检查库 url,如果它匹配,则返回预设的 URL,否则返回 null。例如:

var uriPolicy = {
    mitigate: function(uri) {
        if(/jquery\.js/.test(uri))
            return urlToMyJquery.js;
        else
            return null;
    }
}

【讨论】:

  • 谢谢,如果我想连接不是来自预信任列表的东西怎么办?例如 D3.js。如何从我自己的存储中获取它?
  • 您基本上可以将 url 返回到任何资源,无论是否缓解。虽然不加限制可能会使您的应用面临安全风险,但请务必小心
猜你喜欢
  • 2015-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
相关资源
最近更新 更多