问题标签 [google-caja]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
56 浏览

jquery - 如何使用 htmlService 定位 jQuery 对话框

jQuery 位置使用 caja 不支持的“Fixed”,因此 nice simpleposition: {my: "top", at: "top", of: $("#here")}不适用于 htmlService。所以要移动我的小部件,我必须使用 css 并将位置更改为绝对位置。

有什么方法可以达到与 position: {my: "top", at: "top", of: $("#here")}使用 htmlService 相同的效果吗?

或者我可以使用 jQuery 对话框的替代方法吗?当有人在不离开侧边栏的情况下单击按钮时,我想打开一个简单的提示。

0 投票
1 回答
2173 浏览

google-apps-script - 无法在谷歌应用脚​​本中提供下载链接

更新:我找到了解决方案。这并不一定能解决所有情况,所以我将把这个问题留一小段时间,以防有人能启发我更多。我通过更改 url 的格式解决了这个问题:Google Drive 允许使用这种格式下载文件:

https://docs.google.com/uc?export=download&id=FILE_ID

所以我不知道这是否是其他 URL 的问题;实际上也不确切为什么 .getDownloadUrl() 不起作用......也许有人可以解释。但是现在这似乎在我可以测试的浏览器中工作......


我有一个简单的 WebApp 脚本,我通过添加 Apps Script 小工具在 Google 站点上运行它。该小工具的运行方式与以下表单示例完全相同:

https://developers.google.com/apps-script/guides/html/communication#forms

该小工具旨在执行以下操作:加载页面时,会返回一个表单,用户必须输入许可证密钥才能获得下载产品的链接。我的代码提供表单 OK,并获得表单提交 OK;然后它验证密钥,如果有效,则发回一个下载链接。一切正常;问题是,无论我尝试返回什么下载链接,caja iframe 包装器都会阻止点击链接实际下载文件。

我首选的返回 URL 实际上是通过 Drive API:下载文件在 Google Drive 上,我得到的下载链接如下:

DriveApp.getFileById(downloadFileId).getDownloadUrl()

但是,当在为 WebApp 小工具生成的 caja iframe 中单击返回的链接时,什么也没有发生。我已经尝试了一些其他 URL 格式指向驱动器上的该文件,但没有任何下载工作。

这可能吗?

0 投票
1 回答
377 浏览

javascript - 如何放松 Google Caja HTML Sanitizer?消毒太多了

我正在使用 Google Caja HTML Sanitizer ( https://code.google.com/p/google-caja/wiki/JsHtmlSanitizer ),但是它正在对我不想要的东西进行消毒。

有时我想以类似于以下格式输入数据:

但这变成:

0 投票
2 回答
2271 浏览

java - 如何在 Java 中使用 Google Caja HTML/CSS sanitizer JS 库

我有一个接受自定义 CSS 字段的 Java API。我需要在将 CSS 存储到我的数据库之前对其进行清理,并希望为此使用Google Caja

首先,我尝试使用Rhino JavaScript 引擎运行Google Caja HTML/CSS sanitizer JavaScript 库。不幸的是,这不起作用,因为该库在很大程度上依赖于 DOM(特别是对象)的存在。window

接下来,我从Maven 存储库中导入了 Caja 项目。我查看了一些测试,但找不到如何使用消毒剂的示例。

我可以尝试将浏览器带到服务器上,但这似乎有点过分。

有没有人能够使用 Caja 来清理 Java 中的 CSS 字符串?

提前致谢!

0 投票
0 回答
441 浏览

javascript - 在沙箱中加载 html、css、javascript 以防止任何通信

假设我希望执行一个禁止从外部源加载任何内容的 html/css/JS 页面。除此之外,一切都应该被允许。

一些例子

HTML

CSS

JavaScript


我首先希望'ssandbox上的属性<iframe>允许这样做,但事实证明不能这样做。接下来一直在研究 CSP,我认为它能够涵盖 CSS 和 AJAX 部分,但无法阻止信息通过例如 iframed 自动点击链接或location.href. 那么,有没有其他方法可以让这一切一起工作?或者这可以通过 Google Caja 来实现(我宁愿不必自动重写所有内容,但如果没有其他选择,那么我也愿意接受)?

0 投票
1 回答
212 浏览

java - Java:解析 JavaScript 并标记错误

我一直运气不好试图让它工作,所以我希望有人能在这里提供帮助。

在 Java 中,我需要能够获取包含 JavaScript 的 HTML 页面,并在不执行 JavaScript 代码的情况下检测任何 JavaScript 错误,最好是不执行 JavaScript 代码。

我找到了这篇文章: Java 的 Javascript 解析器

而且我试图弄清楚我应该如何使用 Caja 来做到这一点,但我很难找到任何文档,其中包含与我正在做的事情接近的任何工作示例。

因此,我查看了那篇文章中也提到的 Nashorn。我发现了一些示例,它们展示了如何从 Java 执行 JavaScript 代码,但这并不能处理整个 HTML 页面。即使这样,执行似乎也不包括验证常见 JavaScript 函数的能力(例如,它没有听说过“警报”)。

任何人都可以推荐一些可以做我想做的事情,并为他们的文档指出正确的方向或给我一个例子吗?

0 投票
0 回答
61 浏览

javascript - 使用 Google Caja防止删除

为了安全起见,我在客户端使用 Google Caja 来清理 HTML。但是,不同元素的样式与我在消毒之前收到的样式不同。我需要保留标签中的内容,并且我正在尝试弄清楚如何。

例如,我收到以下 HTML:

html_sanitize(bodyHtml, urlX, idX);返回:

理想情况下,我想保持样式标签与其他所有内容相同。像这样。

我一直在尝试到处寻找解决方案,但我做不到。我还查看了文档,实施了自定义策略,但即便如此我也无法控制脚本标签被删除。

有没有办法用 Google Caja 做到这一点?

0 投票
1 回答
61 浏览

google-caja - 如何检查用户的浏览器是否支持 Google Caja?

我正在使用 Google Caja 来清理我网站上的用户输入。我目前正在传递给 caja.whenReady() 的回调中处理用户的输入。但是,在 Microsoft Edge 上,永远不会调用回调,因为 Caja 无法确保 Edge 安全。如果 Caja 不起作用,我想回退到处理用户的内容服务器端,在这里我将简单地去除所有 JavaScript。

如何检查 Caja 是否适用于用户的浏览器?

0 投票
1 回答
36 浏览

javascript - 防止代码读取 cookie(可能使用 google CAJA)

快速旁注: 不是帖子的“可能重复”是否可以在浏览器中运行沙箱 JavaScript?,它与 cookie无关- 我需要询问有关 cookie 的问题。不过,我确实阅读了答案。


你好!我有一个网页,(注册用户)可以在其中创建自己的HTML页面并轻松访问和编辑它们。

每次用户执行操作时,为了证明执行操作的用户是执行操作的帐户的用户(换句话说,验证用户),登录令牌会随着操作发送到服务器必须完成。(快速说明:我存储的令牌不是用户的密码,它是一个随机生成的字符串,每次登录都会更改)。这有效,但有一个问题。

由于用户有能力创建自己的HTML页面,因此有人可以创建一个页面来读取用户的登录 cookie 并将其发送给某人。使用这种方法,有人可以进入其他人的帐户。

我听说过https://developers.google.com/caja/ - 这似乎非常有用。我阅读了CAJA页面,但没有关于防止 cookie 的内容。

理想情况下,我希望用户仍然能够存储和读取他们自己的 cookie,但不能存储和读取登录令牌。尽管那可能是不可能的。

因此,完全阻止用户创建的脚本读取或写入 cookie 是可行的。

但是有一个问题:我对CAJA完全陌生。有人可以解释如何使用CAJA或事实上阻止 cookie - 类似的东西吗?

先感谢您

0 投票
1 回答
134 浏览

javascript - 如何通过 Google CAJA 传递库?

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

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