在JSF 2.2中引入了新的<f:viewAction>
组件,更重要的是它与CSRF攻击一起保护利用此功能的页面。
JSF 2.2规范中提到了该功能:
调用 ViewHandler.getProtectedViewsUnmodifiable()以确定此viewId的视图是否受保护。如果不, 假设所请求的视图未受保护,并且不采取其他视图保护步骤。获得的价值 请求参数的值,其名称由值的值给出 ResponseStateManager.NON_POSTBACK_VIEW_TOKEN_PARAM。如果没有价值,请抛出 ProtectedViewException。如果该值存在,请将其与返回值进行比较 的 ResponseStateManager.getCryptographicallyStrongTokenFromSession()即可。如果值不匹配,则抛出 ProtectedViewException。 ...
让我感到好奇的是,在Mojarra中生成的 getCryptographicallyStrongTokenFromSession()方法使用的令牌是怎样的,因为这是我们用于某些应用程序的JSF实现。 我很惊讶地发现在 2.2.11 之前版本中的实现看起来像这样:
private String createCryptographicallyStrongToken() {
// PENDING: http://java.net/jira/browse/JAVASERVERFACES-2204
String result = "" + System.currentTimeMillis();
return result;
}
从版本2.2.11开始,它似乎更加强大,而currentTimeMill实际上是使用AES加密的。
由于此实现的非加密版本已进入Wildfly 8.x服务器的最终版本(8.0.0.Final,8.1.0.Final,8.2.0.Final和8.2.1。最终)是否意味着部署在这些服务器上并依赖<protected-views>
功能的应用程序容易受到攻击?