1. Agree with Daan. Putting the flag on the command level as a gate would
eliminate unneeded check for non-sensitive command¹s parameters.
Especially considering that majority of the commands are not sensitive.

2. I would really like some performance test to run on a top of the fix,
Mandar. As a result, I would like to see the difference between ³before
and after² ways. Also have you considered using Guava CharMatcher
https://code.google.com/p/guava-libraries/wiki/StringsExplained#CharMatcher
? 

Daan, I¹m not really sure if the Guava libraries can be shipped under
Apache license, please advise on this part.

Thanks,
Alena.

On 4/14/14, 10:06 AM, "Daan Hoogland" <daan.hoogl...@gmail.com> wrote:

>you got my drift. we could also replace the regex with a tree of flags
>to search that contains flags or method names. Not sure how that
>impacts performance.
>
>On Mon, Apr 14, 2014 at 11:14 AM, Mandar Barve
><mandar.ba...@sungardas.com> wrote:
>> Do you mean at init walk the list of "sensitive" classes somehow,
>>followed
>> by "sensitive" Params and build the REGEX to be used at run time?
>>Basically
>> split the existing logic into 2 parts? That sounds like a good idea. I
>>will
>> need to find out how to do it but sounds doable.
>>
>> Thanks,
>> Mandar
>>
>>
>> On Mon, Apr 14, 2014 at 10:45 AM, Daan Hoogland
>><daan.hoogl...@gmail.com>
>> wrote:
>>>
>>> How about augmenting on loadtime?
>>>
>>> mobile bilingual spell checker used
>>>
>>> Op 14 apr. 2014 07:06 schreef "Mandar Barve"
>>><mandar.ba...@sungardas.com>:
>>>>
>>>> This solution for which I have posted a pilot patch has following
>>>> potential
>>>> drawbacks:
>>>>
>>>> 1. For a sensitive API we need to load all "Param/Parameter"
>>>>annotations
>>>> iteratively. This can be time consuming.
>>>> 2. We also have to iterate multiple times in the cleanString utility
>>>> function ensuring every identified sensitive keyword is stripped.
>>>> 3. This adds multiple iterations in the code path for stripping
>>>>sensitive
>>>> data.
>>>>
>>>> Other potential solution to think about could be:
>>>> 1. Augment the list of "hard coded" keywords with what we know as the
>>>> additional sensitive keywords (by carefully going through various
>>>> response
>>>> key words, which will be required either ways). Hopefully this won't
>>>>come
>>>> out to be too big a list.
>>>> 2. Device a scheme of tagging sensitive API request/response
>>>>parameters
>>>> with a well known prefix or a suffix. The filter REGEX can be
>>>>augmented
>>>> further to look for such sub strings. This can remove the need for
>>>> iterative code.
>>>>
>>>> Thanks,
>>>> Mandar
>>>>
>>>>
>>>> On Tue, Apr 8, 2014 at 1:32 PM, Mandar Barve
>>>> <mandar.ba...@sungard.com>wrote:
>>>>
>>>> >
>>>> > -----------------------------------------------------------
>>>> > This is an automatically generated e-mail. To reply, visit:
>>>> > https://reviews.apache.org/r/20117/
>>>> > -----------------------------------------------------------
>>>> >
>>>> > Review request for cloudstack and Alena Prokharchyk.
>>>> >
>>>> >
>>>> > Repository: cloudstack-git
>>>> >
>>>> >
>>>> > Description
>>>> > -------
>>>> >
>>>> > Hi Alena,
>>>> >     I am attaching a pilot patch for the problem we are trying to
>>>> > solve.
>>>> > Please let me know your thoughts, comments, suggestions on the
>>>>approach
>>>> > and
>>>> > code. We can make widespread code changes after agreeing on the
>>>> > approach
>>>> > and any other details.
>>>> >
>>>> > Problem: When stripping sensitive parameters from the response log
>>>> > string,
>>>> > the strip logic should be generic. Current cleanString code strips
>>>>few
>>>> > hardcoded keywords from the response string.
>>>> >
>>>> > Approach: As discussed in the context of CS JIRA 4406 I have
>>>>modified
>>>> > @Parameter annotation applied to fields of command classes and
>>>>@Param
>>>> > annotation applied to fields of response classes.
>>>> >
>>>> > 1. Annotations modified to add a new flag that conveys sensitivity
>>>>of
>>>> > the
>>>> > parameter for log, default set to false.
>>>> > 2. cleanString utility function is modified to process an array of
>>>> > strings
>>>> > passed to it so it can strip all.
>>>> > 3. To keep this backward compatible (and also don't know the code
>>>> > change
>>>> > implications at other places at this time) made sure old cleanString
>>>> > code
>>>> > will continue to strip hardcoded keywords when zero sized filter
>>>>array
>>>> > is
>>>> > passed. This can change if we think so and when we think so. This
>>>> > change I
>>>> > am putting is minimal focussed to solve current problem.
>>>> > 4. In ApiServer code where we are loading APICommand annotation to
>>>> > check
>>>> > if the command response carried sensitive data, additional code is
>>>> > added to
>>>> > load response class signature Param and SerializedName annotations
>>>>to
>>>> > get
>>>> > the name of the field that is flagged to carry sensitive information
>>>> > 5. A list of such names is built and passed to cleanString to strip
>>>> > 6. All code areas that got affected by cleanString signature change
>>>>are
>>>> > modified to pass zero sized filter arrays to cleanString
>>>> > 7. pom.xml is modified for server project to include gson dependency
>>>> > 8.StringUtil unit test code modified to use new signature for
>>>> > cleanString.
>>>> > (New tests will need to be added in the final patch for testing the
>>>>new
>>>> > functions of cleanString)
>>>> >
>>>> > On final note this addresses handling the audit logging of response
>>>> > strings alone. I haven't looked into audit logging of request
>>>>strings
>>>> > and
>>>> > what will need to be done there.
>>>> >
>>>> > This pilot patch is tested for listUsers command response. The code
>>>> > strips
>>>> > apikey, secretkey and additional parameter userid (only meant for
>>>> > testing)
>>>> > as they are tagged to be sensitive.
>>>> >
>>>> > Thanks,
>>>> > Mandar
>>>> >
>>>> >
>>>> > Diffs
>>>> > -----
>>>> >
>>>> >   api/src/com/cloud/serializer/Param.java 3e6f852
>>>> >   api/src/org/apache/cloudstack/api/Parameter.java 7ee6897
>>>> >
>>>> >
>>>> > 
>>>>api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.ja
>>>>va
>>>> > d15ea47
>>>> >   api/src/org/apache/cloudstack/api/response/UserResponse.java
>>>>40e1561
>>>> >   core/src/com/cloud/agent/transport/Request.java b5890d9
>>>> >
>>>> >
>>>> > 
>>>>plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/resource/Hyp
>>>>ervDirectConnectResource.java
>>>> > 12fc39d
>>>> >
>>>> >
>>>> > 
>>>>plugins/storage/image/default/src/org/apache/cloudstack/storage/datasto
>>>>re/lifecycle/CloudStackImageStoreLifeCycleImpl.java
>>>> > 7675e94
>>>> >   server/pom.xml 6e60fc4
>>>> >   server/src/com/cloud/api/ApiServer.java 42ac8b7
>>>> >   server/src/com/cloud/api/ApiServlet.java e78bf38
>>>> >   server/src/com/cloud/api/query/dao/ImageStoreJoinDaoImpl.java
>>>>f1f873c
>>>> >   server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java
>>>> > 1d89b19
>>>> >   utils/src/com/cloud/utils/StringUtils.java 1600488
>>>> >   utils/test/com/cloud/utils/StringUtilsTest.java 5a90300
>>>> >
>>>> > Diff: https://reviews.apache.org/r/20117/diff/
>>>> >
>>>> >
>>>> > Testing
>>>> > -------
>>>> >
>>>> > Tested the strip logic in the pilot patch for listUsers command
>>>> > response.
>>>> >
>>>> >
>>>> > Thanks,
>>>> >
>>>> > Mandar Barve
>>>> >
>>>> >
>>
>>
>
>
>
>-- 
>Daan

Reply via email to