首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在操作CSRF令牌后仍可访问<受保护-视图>中声明的视图

在操作CSRF令牌后仍可访问<受保护-视图>中声明的视图
EN

Stack Overflow用户
提问于 2015-03-17 16:30:46
回答 1查看 1.8K关注 0票数 5

我正在探索JSF2.2中的新特性(到目前为止非常酷),但我仍然不明白受保护的视图是如何工作的,我创建了一个带有指向facelet2的链接的facelet2,如下所示:

代码语言:javascript
复制
<h:link styleClass="link" value="Go to protected page" id="link1"
    outcome="/protected/facelet2.xhtml"></h:link>

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

代码语言:javascript
复制
<protected-views>
    <url-pattern>/protected/facelet2.xhtml</url-pattern>
</protected-views>

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

代码语言:javascript
复制
http://localhost:8080/<project>/protected/facelet2.faces?javax.faces.Token=1426608965211

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

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

我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-17 17:49:40

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

因此,给定/protected/facelet2.faces的实际URL,您需要按以下方式配置它:

代码语言:javascript
复制
<protected-views>
    <url-pattern>/protected/facelet2.faces</url-pattern>
</protected-views>

然而,上发现了当前Mojarra2.2.10实现中的一些棘手问题:

  1. 实际上,它没有按照Servlet12.1规范(在源代码中甚至有一个模糊的注释,表明!)进行前缀/后缀匹配。这仅仅是一个精确的匹配。这意味着,您不能使用像/protected/*这样的通配符URL模式。
  2. 在生成<h:link>时,它不会将受保护的视图URL模式与解析的URL进行比较,而是与JSF视图ID进行比较。而且,在检查传入的请求时,它不会将请求URL与JSF进行比较(就像在链接生成期间一样),而是与<url-pattern>进行比较。因此,这永远不匹配,完全解释了为什么您可以在没有有效令牌的情况下简单地访问它。

基本上,如果需要保留*.faces的JSF1.0风格的URL模式,则需要进行以下配置。

代码语言:javascript
复制
<protected-views>
    <url-pattern>/protected/facelet2.xhtml</url-pattern>
    <url-pattern>/protected/facelet2.faces</url-pattern>
</protected-views>

在没有有效令牌的情况下被访问时,它将正确地抛出javax.faces.application.ProtectedViewException。更好的方法是在FacesServlet中的*.xhtml上显式地映射web.xml

代码语言:javascript
复制
<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

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

我已经把这件事报告给了莫吉拉人,名叫第3837期

另请参阅:

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29104597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档