Java Server Faces 和内容安全策略?

2023-11-28

我想用内容安全政策对于我基于 JSF 2.1 的 Web 项目,我认为它可以显着提高对 XSS 攻击的防护。

由于 CSP 的默认行为阻止所有内联 JavaScript它基本上破坏了 JSF 的

<f:ajax execute="input" render="output" />

功能。这是因为 JSF 在使用上述构造时会生成大量内联 JavaScript 代码。

有谁知道是否有办法在基于 JSF 的项目中使用 CSPf:ajax无需使用以下 CSP 指令来允许内联 JS:

Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'

我知道手动将所有 JavaScript 放在单独的文件中是可能的,但这样做我将被迫手动执行所有 Ajax 操作。


您可以避免使用unsafe-inline源表达式以便将内联列入白名单<script>s,通过利用nonce and/or hash反而 [1]。这样做需要:

  • 包含一个nonce内联属性<script>元素,例如

    <f:ajax ... pt:nonce="$placeHolder" />

    (假设pt前缀已绑定到http://xmlns.jcp.org/jsf/passthrough命名空间)。该属性的值可以只是视图文件中的占位符,使您能够在所有受信任的内联中集体替换它<script>稍后。

  • 更换(通过Filter例如)在每个响应中使用随机值的占位符,并将该值插入到 CSP HTTP 标头和/或等效项中<meta>元素,例如生产

    <script ... nonce="126cfb..."> and

    Content-Security-Policy: default-src 'self'; ... script-src 'self' 'nonce-126cfb...'.

    理论上,产生随机数值s 也应该存储在服务器上,以避免在不久的将来重新分配它们,因为它们应该是unique.

  • 另外或替代地,插入每个可信内联<script>内容'digest进入 CSP HTTP 标头和/或同等内容<meta>元素及其各自的哈希算法, 例如

    Content-Security-Policy: script-src 'sha256-126cfb...='.

    哈希值我想,在准备每个响应时也应该重新生成 s ,因为<script>通常预计会随着时间的推移而发生变化,而对于 JSF,您可能不会立即注意到它们发生变化。

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

Java Server Faces 和内容安全策略? 的相关文章

随机推荐

  • jquery live 的替代方案可以工作

    我有这个简单的代码 http jsfiddle net borth BmEZv 如果您单击该链接一次 它就可以正常工作 如果你点击第二次 它就不起作用了 由于 html 是在 DOM 加载后才加载到 html 中的 所以我尝试过 on bi
  • Bootstrap 下拉子菜单丢失

    Bootstrap 3 仍处于 RC 阶段 但我只是在尝试实现它 我不知道如何放置子菜单类 即使 css 中没有类 甚至新文档也没有提及任何内容 它在 2 x 中存在 类名称为下拉子菜单 Bootstrap 5 2023 年更新 添加一些
  • 如何使用 Gradle 和 Spring Boot 捕获构建信息

    我正在尝试访问构建信息值 例如version在我的 Java 主应用程序中使用 Spring Boot 和 Gradle 我找不到任何有关如何配置的文档 示例 build gradle application yml 如果需要的话 Java
  • 阿拉伯字符编码问题:UTF-8 与 Windows-1256

    快速背景 我继承了一个包含英语和阿拉伯语文本组合的大型 sql 转储文件 并且 我认为 它最初是使用 latin1 导出的 在导入文件之前 我将所有出现的 latin1 更改为 utf8 阿拉伯语文本在 phpmyadmin 中没有正确显示
  • 将所有使用的Python模块收集到一个文件夹中?

    我认为以前没有人问过这个问题 我有一个包含许多不同 py 文件的文件夹 我制作的脚本只使用了一些 但有些调用了其他脚本 我不知道所有正在使用的脚本 是否有一种程序可以获取使该脚本运行到一个文件夹中所需的一切 Cheers Use the m
  • Character.getNumericValue() 问题

    我可能遗漏了一些东西 但是为什么这两个数值等于 1 System out println Character getNumericValue Character MAX VALUE System out println Character
  • 如何从时间戳列表中获取开始和结束范围?

    我有一个像这样的时间戳字符串 2016 01 14T22 43 55Z 2016 01 15T00 04 50Z 2016 01 15T00 44 59 08 30 2016 01 15T01 25 35 05 00 2016 01 15T
  • 表单未使用 JS 提交

    我有世界上最简单的 JavaScript 函数 fnSubmit window print document formname submit 这是由以下人员调用的
  • 如何以编程方式设置文档字符串?

    我有一个返回函数的包装函数 有没有办法以编程方式设置返回函数的文档字符串 如果我可以写信给 doc 我会做以下事情 def wrapper a def add something b return a b add something doc
  • 工具带安装:找不到 gem Heroku

    当我尝试从应用程序目录中的终端执行任何 Heroku 命令时 收到 无法找到 RubyGem heroku Gem LoadError 消息 已尝试擦除并重新安装 Toolbelt 以及任何以前安装的 Heroku gem 使用完整路径有效
  • 在C#中,如何获取空白的XML节点值?

    我有一个 XML 节点 其值为空格 例子
  • UI线程和其他线程使用handler进行通信

    UI线程和后台线程之间如何进行线程间通信 我想在这里使用通用处理程序概念来更新我的用户界面 我有如下概念 new Thread new Runnable public void run while mProgressStatus lt 10
  • 设置要使用的 JAXB 上下文工厂初始化类

    我已经更新了我们的项目 基于 Java EE 在 Websphere 8 5 上运行 以使用公司内部框架的新版本 以及 Ejb 3 x 部署描述符 而不是 2 x 部署描述符 从那时起 我的集成测试失败 但出现以下异常 java lang
  • 显示图表控件 Xaxis 中的所有值

    我有一张包含一堆产品的图表 总共 35 种 他们放大了 X 轴 该图表绘制得很好 但只显示了 5 个产品名称 而我需要将它们全部显示出来 我已将 MinorTickMark 启用为 true 以便显示所有刻度线 但如何使它们各自的标签可见
  • 免费MySQL同步工具[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 有人知道一些用于同步 My
  • C++20 概念:GCC 和 Clang 中具有指针类型成员的复合需求表达式的行为差异

    考虑以下代码 Godbolt include
  • 使用 PRAW 获得超过 100 个搜索结果?

    我使用以下代码通过 PRAW 4 4 0 获取 reddit 搜索结果 params sort new time filter year return reddit subreddit subreddit search params 我想从
  • 对象类中的布鲁克斯指针

    在 Android SDK 21 的 Object java 代码中 我遇到了术语 Brooks Pointer 我读了帖子here但我没有清楚地了解它 在这篇文章中 它被描述为对堆中对象本身的引用 但它有什么用呢 它将如何帮助垃圾收集和对
  • 虚拟变量和预处理

    我有一个包含一些虚拟变量的数据框 我想将其用作训练集glmnet 由于我正在使用glmnet我想使用以下功能来居中和缩放功能preProcess插入符号中的选项train功能 我不希望这种转换也应用于虚拟变量 有没有办法阻止这些变量的转换
  • Java Server Faces 和内容安全策略?

    我想用内容安全政策对于我基于 JSF 2 1 的 Web 项目 我认为它可以显着提高对 XSS 攻击的防护 由于 CSP 的默认行为阻止所有内联 JavaScript它基本上破坏了 JSF 的