1

我正在开发我的 struts2 应用程序来解决参数篡改问题。我听说这可以通过在我的操作中实现 ParameterNameAware 接口来解决,但我还没有找到解释这种情况的最佳示例。谁能给我一个关于如何使用 ParameterNameAware 的好例子。快速回答将不胜感激。

4

1 回答 1

1

关于这个接口的全部想法是维护一个有效参数名称的列表,并通过拒绝不在此列表中的任何请求参数(白名单)。这在黑客试图将不需要的表单字段值包含为可能在某些情况下执行的隐藏变量。例如,包含太多表单字段变量(>10000 等),可能会在服务器端创建拒绝服务。

一旦你实现了这一点,你可以立即拒绝当前请求范围内的任何不需要的参数,或者你可以更好地控制这种情况。

可能的实施:

实现ParameterNameAware接口并覆盖其acceptableParameterName方法,如下所示:

  public boolean acceptableParameterName(String parameterName) {

            boolean allowedParameterName = true ;

            if ( parameterName.contains("session")  || parameterName.contains("request") ) {

                    allowedParameterName = false ;

            }

            return allowedParameterName;
    } 

您需要在包含 getter 和 setter 方法的表单 bean 中实现此接口。在这个特定的示例中,如果当前请求包含任何表单字段变量,例如请求或会话,那么这是一个失败的场景。这只是一个典型的例子。此链接中有完整的文档 Class ParametersInterceptor

于 2012-09-18T05:40:43.820 回答