使用ParameterNameAware接口避免参数篡改(Struts2)

时间:2012-09-18 02:00:04

标签: java struts2

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

1 个答案:

答案 0 :(得分:1)

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

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

可能的实施:

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

  public boolean acceptableParameterName(String parameterName) {

            boolean allowedParameterName = true ;

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

                    allowedParameterName = false ;

            }

            return allowedParameterName;
    } 

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