gpt4 book ai didi

jsf - 操作 CSRF token 后,在 中声明的 View 仍然可以访问

转载 作者:行者123 更新时间:2023-12-01 21:54:33 26 4
gpt4 key购买 nike

我正在探索 JSF 2.2 中的新功能(到目前为止非常酷),但我仍然不明白 protected View 是如何工作的,我创建了一个包含 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>

现在,当我运行页面时,网址中会添加一个 token :

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

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

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

我做错了什么吗?

最佳答案

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

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

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

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

  1. 它实际上并没有按照 Servlet 12.1 规范进行前缀/后缀匹配(there's even a vague comment in source code indicating that!)。它只是进行精确匹配。这意味着,您不能使用通配符 URL 模式,如 /protected/* .

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

基本上,如果您需要保留 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在没有有效 token 的情况下进行访问时。更好的是只映射 FacesServlet明确在 *.xhtmlweb.xml .

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

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

我已将此事报告给 Mojarra 人员:issue 3837 .

另请参阅:

关于jsf - 操作 CSRF token 后,在 <protected-views> 中声明的 View 仍然可以访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29104597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com