操作 CSRF 令牌后,在 中声明的视图仍然可以访问

2023-12-29

我正在探索 JSF 2.2 中的新功能(到目前为止非常酷),但我仍然不明白受保护的视图是如何工作的,我创建了一个带有 Facelet2 链接的 Facelet1,如下所示:

<h:link styleClass="link" value="Go to protected page" id="link1"
    outcome="/protected/facelet2.xhtml"></h:link>

在我的 faces-config.xml 中我添加了以下内容:

<protected-views>
    <url-pattern>/protected/facelet2.xhtml</url-pattern>
</protected-views>

现在,当我运行页面时,会在 url 中添加一个令牌:

http://localhost:8080/<project>/protected/facelet2.faces?javax.faces.Token=1426608965211

根据文档,如果令牌与服务器中的令牌不匹配,则不会处理 GET 请求(我的理解正确吗?)。

但是,如果我修改令牌(使用 Firebug 或浏览器中包含的开发工具),即使令牌被修改,请求仍然会被处理。

难道我做错了什么?


这是因为你的FacesServlet显然映射到 JSF 1.0 风格的 URL 模式*.faces而不是 JSF 2.0 风格的 URL 模式*.xhtml. The <protected-views><url-pattern>必须与您在浏览器地址栏中看到的实际 URL 模式匹配。

因此,给定一个实际 URL/protected/facelet2.faces,您需要如下配置:

<protected-views>
    <url-pattern>/protected/facelet2.faces</url-pattern>
</protected-views>

However在此过程中,我发现了当前 Mojarra 2.2.10 实现中的一些令人讨厌的问题:

  1. 它实际上并没有按照 Servlet 12.1 规范进行前缀/后缀匹配(源代码中甚至有一个模糊的注释表明 http://grepcode.com/file/repo1.maven.org/maven2/org.glassfish/javax.faces/2.2.9/com/sun/faces/application/view/MultiViewHandler.java#273!)。它只是进行精确匹配。这意味着,您不能使用通配符 URL 模式,例如/protected/*.

  2. 当生成<h:link>,它不会将受保护的视图 URL 模式与已解析的 URL 进行比较,而是与 JSF 视图 ID 进行比较。并且,在检查传入请求时,它不会将请求 URL 与 JSF 视图 ID 进行比较(就像在链接生成期间一样),而是与<url-pattern>。因此,这永远不会匹配,这完全解释了为什么您可以在没有有效令牌的情况下简单地访问它。

基本上,如果您需要保留 JSF 1.0 风格的 URL 模式,则需要以下配置*.faces.

<protected-views>
    <url-pattern>/protected/facelet2.xhtml</url-pattern>
    <url-pattern>/protected/facelet2.faces</url-pattern>
</protected-views>

然后它会正确抛出javax.faces.application.ProtectedViewException在没有有效令牌的情况下进行访问时。更好的是只绘制地图FacesServlet明确地在*.xhtml in web.xml.

<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

这样您就永远不需要处理虚拟 URL。

我已将此事报告给 Mojarra 人员问题 3837 https://java.net/jira/browse/JAVASERVERFACES-3837.

也可以看看:

  • 有时我看到 JSF URL 是 *.jsf,有时是 *.xhtml,有时是 /faces/*。为什么? https://stackoverflow.com/questions/3008395/jsf-facelets-sometimes-i-see-the-url-is-jsf-and-sometimes-xhtml-why
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作 CSRF 令牌后,在 中声明的视图仍然可以访问 的相关文章

随机推荐

  • 嵌套 BlocBuilder() 调用的问题

    我的 Flutter 应用程序有多个 BloC 通过bloc and 颤振块包 这导致了一些技术困难 我使用解决方法解决了这些问题 但我想知道是否有更好的解决方案 我在用块构建器 当监听一个块时 每个块都有自己的 BlocBuilder 调
  • 如何从联系人中获取手机号码

    我的应用程序要求从联系人列表中选择一个联系人 然后仅获取所选联系人的姓名和手机号码以将其存储在应用程序中 我成功获取了姓名 但如何验证该联系人是否有手机号码 不是一个家 然后得到号码 如何查看联系人是否有一个或多个手机号码 在android
  • 设置文本换行的限制

    我正在尝试生成一个包含四个季度的图 每个季度都有一些文字说明该季度的情况 但是 当我尝试换行文本时 我不知道如何设置文本限制 例如 在附图中 我想将文本限制为x 0 但是 它会一直持续到 x 轴限制的末尾 请查找附件中的代码以及代码生成的相
  • Cygwin 中未安装 C++

    我刚刚安装了 Cygwin 并且可以从 Windows 启动 bash shell 执行ls emacs vi等等 但是 当我这样做时g 它说命令未找到 我想g Cygwin 中默认安装了吗 如果不是这种情况 我可以添加的确切类别是什么g
  • 我可以在 iTunes Connect 上更改应用程序的类别吗?

    我在应用程序商店添加了我的应用程序的许多版本 其中实用程序作为主要类别 但现在我想将其添加为生活方式类别 我可以在不删除应用程序的情况下更改此类别吗 创建应用程序的新版本并再次提交二进制文件 在创建新版本时 我们可以更改主要类别和次要类别
  • 将 PyArrayObject 数据类型转换为 C 数组

    我想在 C 扩展中使用我的 Numpy 数组 这种情况下的许多示例都使用 PyArrayObject 的结构 array gt data array gt strides 0 array gt strides 1 指针以便访问数据 如果我想
  • 查看休假事件

    我在 SAPUI5 应用程序中声明了一个视图控制器 现在我想要离开视图时执行任务由用户 已经可以添加回调函数了attachRoutePatternMatched现在 为了在用户导航视图时执行任务 我需要一个等效的函数来处理视图的离开 我用一
  • 当我使其中一个视图无效时,为什么我的布局会完全重绘?

    我有一个复杂的框架布局 其中包含多个自定义视图 主要视图是一个图表 覆盖图表的是一个自定义视图 它代表一个十字线指针 用户可以在图表周围拖动该指针以读取有关特定数据点的详细信息 框架布局捕获所有触摸事件 在其每个子视图上调用 命中测试 方法
  • 如何在 Rust 的 Cargo build 中指定 GLIBC 版本?

    我使用 Rust 1 34 和 1 35 目前它链接到GLIBC 2 18 我该如何限制cargo build链接GLIBC最新版本2 14 不幸的是 你不能 不是真的 而且不一致 这是任何动态链接到 GLIBC 的二进制文件都会遇到的问题
  • pywinauto capture_as_image 添加不需要的边框

    我在用pywinauto截取特定窗口的屏幕截图 这是我用来捕获记事本的代码 法语 Bloc notes from pywinauto import Application app Application connect title re B
  • Chrome 扩展程序“拒绝加载脚本,因为它违反了以下内容安全策略指令”

    我正在尝试创建一个 Chrome 扩展 但我的 JS 都不起作用 控制台显示此错误 拒绝加载脚本 https ajax googleapis com ajax libs jquery 1 12 0 jquery min js https a
  • 如何使用 SQL 注入提取登录信息?

    这是后端 PHP 代码 我将在其中测试漏洞 if isset POST login isset POST password login POST login password POST password sql SELECT FROM us
  • 使用 VBA 单击 IE 网页中的链接/按钮

    我已经阅读了很多有关使用 VBA 单击 IE 中的链接的信息 但我无法让它在我的情况下工作 相关HTML代码如下 div a class Row Icon Company XYZ 12345 a div 我尝试过的VBA代码 记录了3种不同
  • django-admin 命令在 Mac 操作系统中不起作用

    我在 Mac OS 中启动了 Django 并在使用 pip 安装 Django 后 尝试使用以下命令启动一个新项目django admin startproject mysite 我收到错误 bash django admin comma
  • Android 无边框对话框

    我使用 AlertDialog Builder 创建了一个 AlertDialog 但对话框边框占用了屏幕上太多的空间 如何去除边框 我尝试过使用另一个活动来模拟具有透明背景的对话框 但是该对话框被重复使用 并且每次创建一个新的活动都会带来
  • 为什么会出现以及如何修复 ffmpeg 上的警告/错误:没有足够的帧来估计速率;考虑增加探针大小?

    我正在使用的命令 ffmpeg f gdigrab framerate 24 i desktop preset ultrafast pix fmt yuv420p camera1 mp4 流 0 没有足够的帧来估计速率 考虑增加探针大小 并
  • 将两个输入绑定到同一模型

    正如这个笨蛋所证明的那样 http plnkr co edit 74j8DhCPUJwNZ1ckg1rg p preview 我想要一个 两者更新相同 scope变量 以及彼此 现在 当我更新一个输入时 scope 变量发生更改 但另一个范
  • 尝试从 scala 序列化 java map 转换时出现 notserializedException

    我有一个方法来序列化java地图Map
  • 找不到与给定名称匹配的资源:attr 'colorPrimary'

    我正在尝试更改 android studio 中操作栏的颜色 我已经将 minSDKVersion 更改为 21 所以我知道这不是问题 但我不断收到错误 我不知道发生了什么 这是我的 xml
  • 操作 CSRF 令牌后,在 中声明的视图仍然可以访问

    我正在探索 JSF 2 2 中的新功能 到目前为止非常酷 但我仍然不明白受保护的视图是如何工作的 我创建了一个带有 Facelet2 链接的 Facelet1 如下所示