Jira ticket with patch: https://issues.apache.org/struts/browse/WW-2761
Crucible review: http://fisheye6.atlassian.com/cru/CR-10/preview
I added this tests to the testcases:
put("blah", "This is blah"); //assert it is good
put("name", "try_1"); //assert it is not set
put("(name)", "try_2"); //assert it is not set
put("['name']", "try_3"); //assert it is not set
if you can think of other tests, suggest them to add them. Making this
patch I found a bug in parameter interceptor which I had to fix:
protected boolean isAccepted(String paramName) {
if (!this.acceptedParams.isEmpty()) {
for (Pattern pattern : acceptedParams) {
Matcher matcher = pattern.matcher(paramName);
if (matcher.matches()) {
return true; // <-- was returning false here
}
}
}
return acceptedPattern.matcher(paramName).matches();
}
please review it and let me know. I will commit it later, and will
also look into Brian Relph's patch (WW-2760 )
musachy
On Tue, Aug 12, 2008 at 10:27 AM, Musachy Barroso <[EMAIL PROTECTED]> wrote:
> I think that would be great, create a jira ticket, attach a patch to
> it and we will check it out. I am writing a patch for the approach
> that I mentioned before, which will provide the same behavior using
> xml configuration, but having annotations as an option would be good.
>
> musachy
>
> On Tue, Aug 12, 2008 at 10:22 AM, Relph,Brian <[EMAIL PROTECTED]> wrote:
>>
>> I wrote an annotation based parameters interceptor that extends the current
>> parameters interceptor while allowing you to configure the default "accept"
>> policy for an actions properties, as well as a per-property annotation that
>> can override the action's policy. This lets you use the same interceptor /
>> interceptor stack for all actions, and configure each individually to accept
>> or reject parameters. I would still like to add some regex support to the
>> action annotation. Would this interest you?
>>
>> Brian Relph
>>
>> -----Original Message-----
>> From: Musachy Barroso [mailto:[EMAIL PROTECTED]
>> Sent: Tuesday, August 12, 2008 8:53 AM
>> To: Struts Developers List
>> Subject: Re: ParameterFilterInterceptor security issue
>>
>> I forgot to say, that this would prevent all the OGNL expression tricks,
>> because the property name that is passed to MemberAccess to be checked, is
>> the actual property name, and not an expression.
>>
>> musachy
>>
>> On Tue, Aug 12, 2008 at 9:48 AM, Musachy Barroso <[EMAIL PROTECTED]> wrote:
>>> It seems to me like there is an elegant solution to this. We can
>>> rename StaticMemeberAccess to SecurityMemeberAccess, and in there not
>>> only block static member access, but also fields that can be
>>> configured using regular expressions. The params interceptor would
>>> just set these fields before binding the params.
>>>
>>> //OGNL parameter binding just went to #2 in my "must kill" list :)
>>>
>>> musachy
>>>
>>> On Tue, Aug 12, 2008 at 9:14 AM, Rene Gielen <[EMAIL PROTECTED]> wrote:
>>>>
>>>> Am Di, 12.08.2008, 14:20, schrieb Jeromy Evans:
>>>>>
>>>>> This relates to Musachy's recent proposal to remove OGNL entirely
>>>>> from the parameter-setting process. Which I think is a very good idea.
>>>>>
>>>>
>>>> Indeed removing OGNL for parameters would fix this issue, but even if
>>>> we would decide to do so this won't be trivial and might have many
>>>> side effects.
>>>>
>>>>> If I've understood correctly, currently there is no way to filter
>>>>> the parameter names, using regex or otherwise, other than to verify
>>>>> them use a whitelist of valid names.
>>>>>
>>>>
>>>> You can blacklist parameter names in the ParameterInterceptor ref,
>>>> including the possibility to define RegExp patterns. The latter one
>>>> is not possible for the ParameterFilterInterceptor right now, which I
>>>> think is a feature we should add.
>>>>
>>>> Jelmer, would you mind creating an Jira issue for that?
>>>> https://issues.apache.org/struts/
>>>>
>>>> - Rene
>>>>
>>>>> jelmer wrote:
>>>>>> Hi all,
>>>>>>
>>>>>> I was looking into an easy way to prevent people binding on fields
>>>>>> they shouldn't be binding on.
>>>>>>
>>>>>> Say you have a User object, you do not want people to be able to
>>>>>> bind on the isAdmin property.
>>>>>>
>>>>>> Various people remommended using the ParameterFilterInterceptor for
>>>>>> this but it seems to be flatout broken
>>>>>>
>>>>>> When you configure an action like this
>>>>>>
>>>>>> <action name="test" class="com.webapp.action.TestAction">
>>>>>> <interceptor-ref name="param-namevalue-filter">
>>>>>> <param name="blocked">name</param>
>>>>>> </interceptor-ref>
>>>>>> <interceptor-ref name="params"/> </action>
>>>>>>
>>>>>> then this wont work :
>>>>>>
>>>>>> /test.action?name=myname
>>>>>>
>>>>>> but this does :
>>>>>>
>>>>>> /test.action?(name)=jelmer
>>>>>>
>>>>>> and so does this
>>>>>>
>>>>>> /test.action?((name))=jelmer
>>>>>>
>>>>>> And so on, infact it is impossible to block any parameter
>>>>>> effectively with the ParameterFilterInterceptor.
>>>>>>
>>>>>>
>>>>>> Btw. I am aware that there is also the excludeParams method on the
>>>>>> ParametersInterceptor that accepts a regexp, so theoretically you
>>>>>> could use this to block parameters effectively but it would be
>>>>>> extremely hard to write a correct regexp for it. Also I havent
>>>>>> found a way to configure both params interceptors in a
>>>>>> paramsPrepareParamsStack. This will only configure the first params
>>>>>> interceptor in the stack
>>>>>>
>>>>>> <interceptor-ref name="clientCrudStack">
>>>>>> <param name="params.excludeParams">some pattern</param>
>>>>>> </interceptor-ref>
>>>>>>
>>>>>> Struts really seems to be lacking in this area.
>>>>>>
>>>>>>
>>>>
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [EMAIL PROTECTED] For
>>>> additional commands, e-mail: [EMAIL PROTECTED]
>>>>
>>>>
>>>
>>>
>>>
>>> --
>>> "Hey you! Would you help me to carry the stone?" Pink Floyd
>>>
>>
>>
>>
>> --
>> "Hey you! Would you help me to carry the stone?" Pink Floyd
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail:
>> [EMAIL PROTECTED]
>>
>> ----------------------------------------------------------------------
>> CONFIDENTIALITY NOTICE This message and any included attachments are from
>> Cerner Corporation and are intended only for the addressee. The information
>> contained in this message is confidential and may constitute inside or
>> non-public information under international, federal, or state securities
>> laws. Unauthorized forwarding, printing, copying, distribution, or use of
>> such information is strictly prohibited and may be unlawful. If you are not
>> the addressee, please promptly delete this message and notify the sender of
>> the delivery error by e-mail or you may call Cerner's corporate offices in
>> Kansas City, Missouri, U.S.A at (+1) (816)221-1024.
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>
>
>
> --
> "Hey you! Would you help me to carry the stone?" Pink Floyd
>
--
"Hey you! Would you help me to carry the stone?" Pink Floyd
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]