Java/Javascript 中的 Eclipse Scout CSP

问题描述 投票:0回答:2

我需要在 Eclipse Scout 中动态加载 javascript 的帮助。

所以我已经有一个从index.ts 调用的javascript,将脚本和CSP 的元标记放在head 部分中。有很多例子可以说明如何做到这一点。

我的问题是“不安全”通常用于本地项目等,但就我而言并非如此。即使我使用的示例没有“不安全”,例如

const meta = document.createElement('meta');
meta.httpEquiv = "Content-Security-Policy";
meta.content = "script-src 'self' /myDirectory/myFile.js;"
document.head.appendChild(meta);

它根本不适用于我的域。相对路径肯定是正确的,因为如果我写 ./ 作为相对路径,例如,我会被告知脚本找不到或者是无效的源。

并且meta标签以及script标签也被插入到head区域中,只不过由于CSP错误而没有加载脚本。

我的错误消息如下所示:“拒绝加载脚本 '',因为它违反了以下内容安全策略指令:“script-src 'self'”。请注意,未显式设置 'script-src-elem',因此'script-src' 用作后备。”

我也考虑过允许 Eclipse Scout 的脚本,不幸的是我还没有找到一种方法来做到这一点(如果可能的话)。

原则上,我也会假设插入脚本标签、CSP 元标签和加载脚本之间的时间间隔不合适,但由于我在这方面不是特别有经验,所以我不能对此多说。

javascript java html content-security-policy eclipse-scout
2个回答
0
投票

script-src 'self'
表示仅允许加载来自与 html 页面相同域的脚本。由于这是 Scout 应用程序的默认设置,我认为您不需要调整 CSP 规则。

如何准确加载脚本?您可以使用

$.injectScript(url)
动态加载脚本。

我会检查以下内容:

  1. 删除脚本路径开头的“/”,使其成为相对路径。
  2. 通过粘贴 URL 验证路径是否正确并且脚本可用 进入浏览器地址栏。您可以使用浏览器的开发工具 (F12) 获取请求的 URL。
  3. 如果您的脚本未托管在同一域中,请通过设置配置属性
    scout.cspDirective
    来调整 html 页面的 CSP 规则。示例:
    scout.cspDirective[script-src]='self' https://script-domain.com

0
投票

但实际上我认为问题出在登录上。 目前我已经解决了在基本URL中使用完整路径加载的问题,但是在登录页面中加载不起作用。这可能是因为登录页面是一个子域,这就是为什么我无法加载脚本,但我不确定这一点。目前我使用的代码:

const script = document.createElement(‘script’);
script.src = ‘https://baseUrl/myDirectory/myFile.js’;
document.head.appendChild(script);

上面显示的 CSP 代码仅具有完整路径。 在本地,登录和应用程序之间存在区别,但在“公共”域中,我直接进入登录页面,尽管在 URL 中指定了基本 URL,并且通常首先寻址基本 URL。这就是为什么我是否在登录名和基本 URL 中加载脚本或仅在基本 URL 中加载脚本并不重要,但即使我想在index.ts和login.ts中加载脚本,它也不会工作。 这是我收到的当前错误:

“拒绝加载脚本 '',因为它违反了以下内容安全策略指令:“script-src 'self'”。请注意,未显式设置 'script-src-elem',因此使用 'script-src'作为后备。”

“拒绝加载脚本'http://baseUrl/login',因为它违反了以下内容安全策略指令:“script-src 'self'”。请注意,'script-src-elem'未明确设置,因此'script-src' 用作后备。”

© www.soinside.com 2019 - 2024. All rights reserved.