“inline-style”-内容安全策略和 Javascript 错误

2023-11-24

我在 Apache2 配置中使用以下命令在服务器上打开了内容安全策略:

Header set Content-Security-Policy-Report-Only "default-src 'self'"

(我将其设置为...-Report-Only仅报告错误,而不会在开发过程中真正阻止某些内容。)

此设置会产生一个我不明白的错误。但我可以重现它:

这是简化的 html 代码:

<!DOCTYPE HTML>
<html lang="en">
    <head>
        <script src="/js/test.js"></script>
        <title>test</title>
    </head>
    <body></body>
</html>

如您所见,没有内联脚本,没有内联样式(根本没有样式)和完全空的正文。

这是 Javascript 文件 test.js:

window.onload = function () {
    //create a paragraph with a red text to have some content
    //in my "real" problem, this part is very much code (more than 1000 lines) 
    document.body.innerHTML = '<div id="original"></div><div id="copy"></div>';
    var p1 = document.createElement('p');
    var t1 = document.createTextNode('some text');
    p1.appendChild(t1);
    document.getElementById('original').appendChild(p1);
    //set some style within this content
    p1.style.color = "red";

    //-----------------------------------

    //make a copy of this content
    document.getElementById('copy').innerHTML = document.getElementById('original').innerHTML;
};

此脚本将两个 div 添加到正文,并将带有文本的段落插入其中一个 div 中。然后它将文本的颜色更改为红色。最后,它会复制该 div 的内容,并将该副本插入到另一个 div 中。

我认为我已经做得很好,但是当我在浏览器中打开此文档时,Safari 控制台中报告了以下错误:

[仅限报告] 拒绝应用样式表,因为其哈希值、随机数或“unsafe-inline”既未出现在内容安全策略的 style-src 指令中,也未出现在 default-src 指令中。
测试.js:0

(报告的行号“0”显然不正确)
这是 Opera 和 Chrome 写入控制台的内容:

[仅限报告] 拒绝应用内联样式,因为它违反了以下内容安全策略指令:“default-src 'self'”。启用内联执行需要“unsafe-inline”关键字、哈希值(“sha256-ZBTj5RHLnrF+IxdRZM2RuLfjTJQXNSi7fLQHr09onfY=”)或随机数(“nonce-...”)。另请注意,“style-src”未明确设置,因此“default-src”用作后备。

window.onload @ test.js:15

(第15行是innerHTML的操作)

仅当我将任何样式设置为文档的一部分时(p1.style.color = "red";),然后制作包含样式零件的零件的副本(copy.innerHTML = original.innerHTML).

我的问题:

  • 为什么会出现这个错误呢? (我想了解为什么它报告“内联样式”,尽管没有内联样式)
  • 我怎样才能避免这个错误?

我没有现实的机会去改变原作被操纵的部分。我能改变的就是这一行:

document.getElementById('copy').innerHTML = document.getElementById('original').innerHTML;

Addendum

抱歉,我对此还不够清楚:

I do NOT想要更改 CSP 标头。必须禁止内联样式是有充分理由的。看XSS 攻击和风格属性和类似的问题。

I want:

  1. 了解为什么我的 JavaScript 代码会产生内联样式错误。
  2. 不会产生此类错误的脚本。

Updated:

因为您正在从 DOMElement 转换为文本(通过innerHTML),所以任何具有修改样式的元素都会转换为内联样式。我举了一个例子来说明这一点。

var el = document.getElementById('sample'), 
output = document.getElementById('output'),
affect = document.getElementById('affected');

affect.style.backgroundColor = "#369";
affect.style.color = "#FFF";

output.innerText+=el.innerHTML;
#sample {
  margin:10px;
}

#output {
  margin: 10px;
}
<div id="sample">
  <div id="affected">
  Sample DIV
  </div>
</div>
<div id="output">
  Output: 
</div>

因此,当您设置副本的innerHTML 时,您将修改元素的样式包含为内联样式,这违反了您的策略。

从技术上讲,您可以制作 DOM 元素的副本,然后将其直接插入到 DOM 树中。为此,请查看MDN 文档用于克隆节点。在 DOM 操作不可行的情况下,我的旧答案仍然有效。

旧答案:

根据MDN 文档在 CSP 上,您可以通过发送以下标头来解决该问题:

style-src 'unsafe-inline' 'self'; default-src 'self';

这里是文档对于默认源。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“inline-style”-内容安全策略和 Javascript 错误 的相关文章

  • Jasmine 条件 callThrough 和 callFake

    我有一个返回函数引用的方法 function methodetobeMoked param case1 return func1 case 2 return func2 case n return funcN 我需要监视这个方法并返回特定输
  • 如何让 Google Apps 脚本进行 SHA-256 加密?

    我需要使用文本输入 1 轮 十六进制输出 SHA 256 加密来加密字符串 这应该是一个长度为 64 的字符串 我在 Google Apps 脚本文档中尝试过的每个 SHA 256 加密模块都会返回一组数字 例如 function SHA2
  • 重新排序 Magento JavaScript 包含 (addJs)

    我会保持简单 在我的产品页面上 我需要删除prototype js 文件并将其替换为最新版本的prototype 到目前为止 我已经使用 local xml 成功替换了它
  • 将图像缩略图上传到服务器,而不上传整个图像

    据我所知 我在这里问的是不可能的 但我想无论如何我都会问 以防我遗漏了什么 假设您想让用户上传 JPG 图像 并且这些图像被缩放为较小的图标 并且原始图像始终被丢弃并且不再需要 有没有什么方法可以在大多数现代浏览器中普遍使用 让用户选择硬盘
  • 方向改变后的javascript最大视口高度Android和iOS

    目标 查找设备的最大视口高度 包括设备的空间address bar这样我们就可以动态调整 min body 的大小并将内容向上推 问题 移动浏览器处理方向状态的方式不同 方向变化时更新 DOM 属性的方式也不同 使用 JavaScript
  • Javascript 自时间戳以来经过的时间

    我试图通过将其存储在变量中来 缓存 一些信息 如果 2 分钟过去了 我想获取 实时 值 调用 url 如果 2 分钟还没有过去 我想从变量中获取数据 我基本上想要的是 if time passed is less than 2 minute
  • 将其作为参数传递给 addEventListener()

    我想添加change一组复选框的事件 我如何访问this在我的事件函数中 这样当我执行事件时我可以访问复选框的值 这是我当前的代码 var checkboxes document getElementsByClassName cb Arra
  • 按日期对 JSON 进行排序

    我知道这一定相对简单 但我有一个 JSON 数据集 我想按日期排序 到目前为止 我每次都会遇到问题 现在我将日期存储为this lastUpdated 如果有帮助的话 我可以访问 jquery 但我意识到 sort 是本机 JS 提前致谢
  • jQuery 中如何判断 JSON 对象是否为空

    我有以下 JSON meta limit 20 next null offset 0 previous null total count 0 objects 我对对象感兴趣 我想知道对象是否为空并显示警报 像这样的东西 success fu
  • 无法提取 Typescript 中的对象值

    我一直在尝试将 JavaScript Web 表单转换为 Typescript 但无法弄清楚如何处理以下内容 在 JavaScript 中有效 let fieldValues JSON parse cookieData let keys O
  • 我什么时候应该使用内联和外部 Javascript?

    我想知道什么时候应该包含外部脚本或将它们与 html 代码内联编写 就性能和易于维护而言 这方面的一般做法是什么 真实场景 我有几个需要客户端表单验证的 html 页面 为此 我使用了一个包含在所有这些页面上的 jQuery 插件 但问题是
  • Facebook 登录无法在移动浏览器中使用

    我使用 react facebook login 在我的网站中实现了 facebook 登录module https github com keppelen react facebook login 我在 ComponentDidMount
  • 它们是“相同的”吗?代码大战

    这是完整的问题描述 给定两个数组 a 和 b 编写一个函数 comp a b Clojure 中的 compSame a b 来检查这两个数组是否具有 相同 元素以及相同的重数 这里 相同 意味着 b 中的元素是 a 平方中的元素 无论顺序
  • 元素在主体内找不到足够的空间 - JavaScript 样式

    相关信息 该页面包含两个元素 An
  • jQuery 如何通过不同的列值计算表中的行数

    如何按表列计算不同的表行 Example table thead tr th NAME th th TECHNOLOGY th tr thead tbody tr td john td td jQuery td tr tr td mark
  • 如何更改 Vuetify 日历日期格式

    我正在尝试在以下 Vuetify 日历上启用输入事件 https github com vuetifyjs vuetify blob master packages docs src examples calendars complex e
  • D3 时间解析返回 null

    根据此页面上的说明 https github com mbostock d3 wiki Time Formatting https github com mbostock d3 wiki Time Formatting我正在尝试解析 ISO
  • 如何与使用 child_process.spawn 创建的新创建的服务器交互

    我正在尝试为我的私人托管的 反恐精英全球攻势 服务器制作一个前端 当我点击运行服务器时 在前端 一切正常 服务器启动并记录到控制台 但是如何查看服务器IP地址 服务器中的玩家等信息呢 这是我到目前为止运行服务器的内容 router post
  • 限制线的长度

    我正在尝试画一条代表 弹弓 的线 并且希望它具有最大拉伸长度 在 p5 中 我在位置和位置之间画了一条线 line posA x posA y posB x posB y posA 是鼠标 x 和 y posB 是画布上圆的位置 我想要做的
  • 使用 Three.js 中的设备方向控件进行对象旋转

    我正在迈出使用 JavaScript 进行编码并使用 Three js 的第一步 我正在尝试 Threejs org 的这个例子 http trijs org examples misc controls deviceorientation

随机推荐

  • Nuxt + Vuetify。如何应用主题颜色

    我正在使用 Nuxt js Vuetify js 项目 查看文件assets style app styl we have Import and define Vuetify color theme https vuetifyjs com
  • 如何删除 Chart.js 中轴的线条/规则?

    我设法使用以下方法删除图表中的所有水平线 规则 scales xAxes gridLines display false 但我也想去掉代表 Y 轴的规则 条 但我想保留标签 不幸的是我找不到任何选择 我只能删除整个轴 包括标签 我正在使用
  • MongoDB - 错误:getMore 命令失败:找不到游标

    我需要创建一个新字段sid大约 500K 文档集合中的每个文档 每个sid是唯一的并且基于该记录的现有记录roundedDate and stream fields 我使用以下代码来执行此操作 var cursor db getCollec
  • ajax加载tab后的回调

    如何将一些代码应用于 ajax 加载选项卡的内容 我尝试在加载的内容中使用 document ready 但这阻止了 css 样式的加载 不知道为什么 有回调函数吗 我应该以其他方式在加载的文档中使用 document ready 和样式吗
  • Matlab 中图例标记的高级定制

    It is relatively simple to add basic modifications to markers in matlab legends The legend produced by the following cod
  • 如何在Swing java中的JTable的一行中添加按钮

    我制作了一个 swing GUI 其中包含带有一些行和列的 JTable 我应该如何向 JTable 中的行添加一个按钮 您不将其添加到行中 而是将其添加到单元格中 本教程描述您需要什么
  • 使用 gradle 产品风味删除 AndroidManifest 元素

    我正在设置一个包含一些产品风格的 Android Gradle 项目 我想要
  • 将 CSV 值读入列表字典的最 Pythonic 方法

    我有一个 CSV 文件 其数据列顶部的标题如下 a b c 1 2 3 4 5 6 7 8 9 我需要在列表字典中阅读它 desired result a 1 4 7 b 2 5 8 c 3 6 9 当阅读本文时DictReader我正在使
  • Symfony Doctrine 数组结果的展平数组结果

    通过存储库 我得到了一个数组结果 每个数组都是一个实体对象 如下所示 array 0 gt object of type entity 1 gt another object of type entity 2 gt another obje
  • 如何在 MATLAB 中删除元胞数组内的零项?

    我在 MATLAB 中有一个元胞数组 可以说cell arr它有零条目和非零单元格条目 例如 cell arr 0 0 0 0 0 1x3 cell 1x3 cell 1x3 cell 1x3 cell 有人可以告诉我如何从cell arr
  • 从 Facebook 获取长期访问令牌

    据我了解 最近Facebook决定删除offline access权限 并引入了一种称为长期访问令牌的概念 该令牌的最长有效期为 60 天 有谁知道如何使用 Facebook JavaScript SDK 获取此访问令牌 有一种方法可以将其
  • VariableDoesNotExist:在 u'None' 中查找键 [val2] 失败

    我正在得到一个VariableDoesNotExist以下代码片段出现错误时obj1 page is None obj1 val1 default obj1 page val2 通常 Django 模板不关心属性访问None values
  • 父 DIV 中的圆角不影响子 DIV

    所以 我正在尝试在 CSS3 中使用圆角 不在 IE 中 不关心它是否在那里工作 并且我有一个 DIV 我的所有内容都在其中看起来非常漂亮 我遇到的问题是 有些子 DIV 没有被父级的圆角 掩盖 我不是在寻找孩子继承圆角 我只想让父级内部的
  • 检索 iOS 中按上次播放时间排序的歌曲列表

    我需要获得一份清单N按顺序最近从 iOS 设备播放的歌曲 目前我能想象的唯一方法就是将所有歌曲都通过一个MPMediaQuery并手动对它们进行排序lastPlayedDate 这是一项可能昂贵的操作 我想知道是否有更好的方法 编辑 经过一
  • 如何将枚举数组序列化为 Json 字符串数组? [复制]

    这个问题在这里已经有答案了 根据迭戈在这个问题中得票最高的答案下未答复的评论 枚举的 JSON 序列化为字符串 所以对于一个枚举 public enum ContactType Phone 0 Email 1 Mobile 2 例如 一个属
  • gnuplot:应用数据文件中的颜色名称

    如何从数据文件中获取颜色名称 我没想到这会如此困难 但显然确实如此 为什么版本 1 和版本 2 给出错误的颜色 有没有像版本 3 那样不使用数组的更简单的方法来获得正确的颜色 和 lc var仅适用于索引值 不适用于颜色名称 colorna
  • 下载大尺寸json时如何解决Uncaught RangeError

    我正在尝试下载大型 json 数据 但这导致Uncaught RangeError Invalid string length 请帮忙解决这个问题 提前致谢 这是 Jsfiddle http jsfiddle net sLq3F 456 您
  • 在 Weblogic 12.1.3 上找不到文件 Metro-default.xml

    我们当前在 WebLogic 12 1 2 上运行 在这个环境中我们的应用程序运行良好 我们现在想要的是将我们的应用程序与 WebLogic 12 1 3 环境进行认证 但我们所使用的 Web 服务面临着一个问题 在新版本中 服务器抛出异常
  • 使用给定的概率密度函数生成随机数

    我想指定概率密度函数的分布 然后在 Python 中从该分布中选取 N 个随机数 我该如何去做呢 一般来说 您需要逆累积概率密度函数 一旦你有了这个 那么沿着分布生成随机数就很简单了 import random def sample n r
  • “inline-style”-内容安全策略和 Javascript 错误

    我在 Apache2 配置中使用以下命令在服务器上打开了内容安全策略 Header set Content Security Policy Report Only default src self 我将其设置为 Report Only仅报告