Re: [Mod-security-developers] JSON body processor
Brought to you by:
victorhora,
zimmerletw
|
From: Breno S. <bre...@gm...> - 2012-10-03 14:25:50
|
Hello Ulisses,
Did you have any news about this ?
Let me know your ETA to have it done, maybe we can include it into 2.7 code.
Thanks
Breno
On Sun, Sep 23, 2012 at 2:36 PM, Breno Silva <bre...@gm...> wrote:
> Ulisses,
>
> I think something like:
>
> SecRule JSON "@rx test" "..." <- This will loop and execute operation
> against all JSON variable values
> SecRule JSON:name "@rx test" "..."
> SecRule JSON:user/phone "@rx 123456" "..."
>
> SecRule JSON_RAW "@rx test" "..." -> an unique string with all json data.
> SecRule JSON_NAMES "@rx [a-b] "..."-> collection with variable names
>
> Let see what Ryan think about it from rule creation point of view.
>
> Thanks
>
> Breno
>
>
> On Sun, Sep 23, 2012 at 1:54 PM, Ulisses Montenegro <
> uli...@gm...> wrote:
>
>> Breno,
>>
>> Perhaps it would be easier to look at this the order way around --
>> what would be the most flexible way to write rules for matching JSON
>> data? From a parsing perspective, most libraries offer a
>> JSON-string-to-hashtable approach, which would work for all either
>> scenario.
>>
>> Ryan, do you have any real world use cases for rules matching JSON
>> parameters?
>>
>> Thanks!
>>
>> On Sun, Sep 23, 2012 at 3:38 PM, Breno Silva <bre...@gm...>
>> wrote:
>> > Ulisses,
>> >
>> > I never had a change to think more about this issue.
>> > Looking for this specific case i really don't think would be a good
>> idea to
>> > create a new logic to ARGS* collections. Not sure what Ryan B. think
>> about
>> > it, but from my point of view, if we need a new logic we must create
>> > specific collections.
>> >
>> > ie: JSON, JSON_NAMES ....
>> >
>> > Is "." (dot) allowed to create variables names ? I think yes.
>> > If so, we should go json specification and find a better way to create
>> this
>> > logic. Maybe using "/" ?
>> >
>> > ie: user/name, user/manager/name
>> >
>> > What do you think ?
>> >
>> > Breno
>> >
>> > On Sun, Sep 23, 2012 at 12:34 PM, Ulisses Montenegro
>> > <uli...@gm...> wrote:
>> >>
>> >> Breno & Ryan
>> >>
>> >> Thanks for the pointers. Ryan, I need to look further into how ARGS
>> >> could be used to handle nested data structures. Although deeper
>> >> structures are more common in responses, I've seen some in requests
>> >> too. If we go deeper then 2 levels, then how would we break that data
>> >> into ARGS?
>> >>
>> >> { 'user': {
>> >> 'name': 'John Doe',
>> >> 'email': 'jo...@do...',
>> >> 'manager': {
>> >> 'name': 'Manager John',
>> >> 'email': 'ma...@do...',
>> >> 'company': {
>> >> 'name': 'ModSecurity Corp.',
>> >> (...)
>> >> },
>> >> }
>> >> }
>> >>
>> >> I was thinking that maybe using the fully qualified name for the
>> >> variable might be easier, and would not introduce any artificial
>> >> limitations on the depth on the data structure in the JSON data:
>> >>
>> >> ARGS:user.name = 'John Doe'
>> >> ARGS:user.email = 'jo...@do...'
>> >> ARGS:user.manager.name = 'Manager John'
>> >> ARGS:user.manager.company.name = 'ModSecurity Corp.'
>> >> (...)
>> >>
>> >> Of course, JSON also supports arrays, but since mod_security already
>> >> handles multiple instances of the same parameter, that would not be an
>> >> issue for either option.
>> >>
>> >> Does that make sense, or am I misunderstanding how ARGS work?
>> >>
>> >> Thanks,
>> >> Ulisses
>> >>
>> >> On Sun, Sep 23, 2012 at 1:46 PM, Ryan Barnett <RBa...@tr...>
>> >> wrote:
>> >> > Regarding #2 below - we have two options.
>> >> >
>> >> > 1) A JSON parse could work like the XML parse and access the request
>> >> > body
>> >> > content and simply populate a new collection called JSON. This is
>> like
>> >> > the XML collection that is simply a long string of text. The
>> downside
>> >> > of
>> >> > this approach is that here is no context as to what are parameter
>> >> > names/values. Another option would be to have the JSON parser simply
>> >> > populate this string of text into the current REQUEST_BODY variable.
>> A
>> >> > rule writer can do this today if they wish using the following
>> example
>> >> > pseudo-rule -
>> >> >
>> >> > SecRule REQUEST_HEADERS:Content-Type "@contains application/json"
>> >> > "phase:1,id:1,nolog,pass,ctl:forceRequestBodyVariable"
>> >> >
>> >> > 2) I think that the best way to do this is to attempt to parse the
>> JSON
>> >> > data into name/value pairs and populate that into ARGS. If it is
>> parsed
>> >> > in this way, then we don't need to change anything in the current
>> rules.
>> >> >
>> >> > As just one example, I was reviewing the JSON data sent back to
>> twitter
>> >> > in
>> >> > response to a Content Security Policy (CSP) violation. The
>> content-type
>> >> > is application/json and uses the name/value pairs -
>> >> >
>> >> > POST /scribes/csp_report HTTP/1.1
>> >> > Host: twitter.com
>> >> > User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:15.0)
>> >> > Gecko/20100101 Firefox/15.0
>> >> > Accept:
>> text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
>> >> > Accept-Language: en-us,en;q=0.5
>> >> > Accept-Encoding: gzip, deflate
>> >> > DNT: 1
>> >> > Connection: keep-alive
>> >> > Content-Length: 338
>> >> > Content-Type: application/json
>> >> >
>> >> >
>> >> > {"csp-report":{"document-uri":"
>> https://mobile.twitter.com/i/templates/m5?re
>> >> >
>> >> > v=1347385509950","referrer":"https://mobile.twitter.com/
>> ","blocked-uri":"se
>> >> > lf","violated-directive":"inline
>> >> >
>> >> > <
>> https://mobile.twitter.com/i/templates/m5?rev=1347385509950%22,%22referrer
>> >> >
>> >> > %22:%22
>> https://mobile.twitter.com/%22,%22blocked-uri%22:%22self%22,%22viola
>> >> > ted-directive%22:%22inline> script base
>> >> >
>> >> > restriction","source-file":"
>> https://mobile.twitter.com/i/templates/m5?rev=1
>> >> > 347385509950","script-sample":"onclick
>> >> >
>> >> > <
>> https://mobile.twitter.com/i/templates/m5?rev=1347385509950%22,%22script-s
>> >> > ample%22:%22onclick> attribute on DIV element"}}
>> >> >
>> >> > Based on this you would split the name/value pairs by the "Š":"Š."
>> >> > format and have parsed ARGS variable data for use in our rules like -
>> >> >
>> >> > ######################
>> >> > ARGS:csp-report =
>> >> >
>> >> > "document-uri":"
>> https://mobile.twitter.com/i/templates/m5?rev=1347385509950
>> >> >
>> >> > ","referrer":"https://mobile.twitter.com/
>> ","blocked-uri":"self","violated-d
>> >> > irective":"inline
>> >> >
>> >> > <
>> https://mobile.twitter.com/i/templates/m5?rev=1347385509950%22,%22referrer
>> >> >
>> >> > %22:%22
>> https://mobile.twitter.com/%22,%22blocked-uri%22:%22self%22,%22viola
>> >> > ted-directive%22:%22inline> script base
>> >> >
>> >> > restriction","source-file":"
>> https://mobile.twitter.com/i/templates/m5?rev=1
>> >> > 347385509950","script-sample":"onclick
>> >> >
>> >> > <
>> https://mobile.twitter.com/i/templates/m5?rev=1347385509950%22,%22script-s
>> >> > ample%22:%22onclick> attribute on DIV element"
>> >> >
>> >> > ARGS:document-uri =
>> >> > https://mobile.twitter.com/i/templates/m5?rev=1347385509950
>> >> >
>> >> > <
>> https://mobile.twitter.com/i/templates/m5?rev=1347385509950%22,%22referrer
>> >> >
>> >> > %22:%22
>> https://mobile.twitter.com/%22,%22blocked-uri%22:%22self%22,%22viola
>> >> > ted-directive%22:%22inline>
>> >> >
>> >> > ARGS:referrer = https://mobile.twitter.com/
>> >> >
>> >> > <
>> https://mobile.twitter.com/i/templates/m5?rev=1347385509950%22,%22referrer
>> >> >
>> >> > %22:%22
>> https://mobile.twitter.com/%22,%22blocked-uri%22:%22self%22,%22viola
>> >> > ted-directive%22:%22inline>
>> >> >
>> >> > ARGS:blocked-uri = self
>> >> >
>> >> > ARGS:violated-directive = inline script base restriction
>> >> >
>> >> > ARGS:source-file =
>> >> > https://mobile.twitter.com/i/templates/m5?rev=1347385509950
>> >> >
>> >> > <
>> https://mobile.twitter.com/i/templates/m5?rev=1347385509950%22,%22script-s
>> >> > ample%22:%22onclick>
>> >> >
>> >> > ARGS:script-sample = onclick attribute on DIV element
>> >> > #######################
>> >> >
>> >> > Hope this helps.
>> >> >
>> >> >
>> >> > --
>> >> > Ryan Barnett
>> >> > Trustwave SpiderLabs
>> >> > ModSecurity Project Leader
>> >> > OWASP ModSecurity CRS Project Leader
>> >> >
>> >> >
>> >> >
>> >> >
>> >> >
>> >> > On 9/23/12 9:31 AM, "Ulisses Montenegro" <
>> uli...@gm...>
>> >> > wrote:
>> >> >
>> >> >>Team
>> >> >>
>> >> >>As my first attempt in contributing to mod_security I've decided to
>> >> >>tackle MODSEC-253, a JSON body processor. I've gone through the XML
>> >> >>and multipart body processors and found them apparently
>> >> >>straightforward. I would like some pointers on issues which I need to
>> >> >>address before deciding on my solution, though.
>> >> >>
>> >> >>1. The XML body processor uses libxml for the actual XML parsing, I
>> >> >>assume adding a JSON parser library would be acceptable as well. If
>> >> >>so, what licenses would be acceptable?
>> >> >>2. XML processor offers a XPath interface for rules to match XML
>> >> >>contents, which is a standard, but AFAIK there is nothing equivalent
>> >> >>for JSON (aside from evaluating Javascript object references). What
>> >> >>interface would work best for the rules to gain access to the JSON
>> >> >>contents?
>> >> >>3. Are there any guidelines/rules regarding memory usage and
>> >> >>performance, i.e., how can if my code or the library I'm using is
>> >> >>performing acceptably? I know I can always benchmark/profile other
>> >> >>body processors and compare the results directly, but I'm looking
>> more
>> >> >>towards hard numbers, if they're available.
>> >> >>4. Finally, do these kind of questions go into JIRA? I decided to try
>> >> >>the mailing list first as I did not want to add possibly irrelevant
>> >> >>information to the JIRA issue, but I think at least items [1] and [2]
>> >> >>should be registered there -- is that how it usually works?
>> >> >>
>> >> >>Thanks a lot for the great work on mod_security
>> >> >>Ulisses
>> >> >>
>> >> >>--
>> >> >>³If debugging is the process of removing software bugs, then
>> >> >>programming must be the process of putting them in.² - Edsger
>> Dijkstra
>> >> >>
>> >>
>> >> >>
>> >>--------------------------------------------------------------------------
>> >> >>----
>> >> >>Everyone hates slow websites. So do we.
>> >> >>Make your web apps faster with AppDynamics
>> >> >>Download AppDynamics Lite for free today:
>> >> >>http://ad.doubleclick.net/clk;258768047;13503038;j?
>> >> >>http://info.appdynamics.com/FreeJavaPerformanceDownload.html
>> >> >>_______________________________________________
>> >> >>mod-security-developers mailing list
>> >> >>mod...@li...
>> >> >>https://lists.sourceforge.net/lists/listinfo/mod-security-developers
>> >> >>ModSecurity Services from Trustwave's SpiderLabs:
>> >> >>https://www.trustwave.com/spiderLabs.php
>> >> >
>> >> >
>> >> > ________________________________
>> >> >
>> >> > This transmission may contain information that is privileged,
>> >> > confidential, and/or exempt from disclosure under applicable law. If
>> you are
>> >> > not the intended recipient, you are hereby notified that any
>> disclosure,
>> >> > copying, distribution, or use of the information contained herein
>> (including
>> >> > any reliance thereon) is STRICTLY PROHIBITED. If you received this
>> >> > transmission in error, please immediately contact the sender and
>> destroy the
>> >> > material in its entirety, whether in electronic or hard copy format.
>> >> >
>> >> >
>> >> >
>> >> >
>> ------------------------------------------------------------------------------
>> >> > Everyone hates slow websites. So do we.
>> >> > Make your web apps faster with AppDynamics
>> >> > Download AppDynamics Lite for free today:
>> >> > http://ad.doubleclick.net/clk;258768047;13503038;j?
>> >> > http://info.appdynamics.com/FreeJavaPerformanceDownload.html
>> >> > _______________________________________________
>> >> > mod-security-developers mailing list
>> >> > mod...@li...
>> >> > https://lists.sourceforge.net/lists/listinfo/mod-security-developers
>> >> > ModSecurity Services from Trustwave's SpiderLabs:
>> >> > https://www.trustwave.com/spiderLabs.php
>> >>
>> >>
>> >>
>> >> --
>> >> “If debugging is the process of removing software bugs, then
>> >> programming must be the process of putting them in.” - Edsger Dijkstra
>> >>
>> >>
>> >>
>> ------------------------------------------------------------------------------
>> >> Everyone hates slow websites. So do we.
>> >> Make your web apps faster with AppDynamics
>> >> Download AppDynamics Lite for free today:
>> >> http://ad.doubleclick.net/clk;258768047;13503038;j?
>> >> http://info.appdynamics.com/FreeJavaPerformanceDownload.html
>> >> _______________________________________________
>> >> mod-security-developers mailing list
>> >> mod...@li...
>> >> https://lists.sourceforge.net/lists/listinfo/mod-security-developers
>> >> ModSecurity Services from Trustwave's SpiderLabs:
>> >> https://www.trustwave.com/spiderLabs.php
>> >
>> >
>> >
>> >
>> ------------------------------------------------------------------------------
>> > Everyone hates slow websites. So do we.
>> > Make your web apps faster with AppDynamics
>> > Download AppDynamics Lite for free today:
>> > http://ad.doubleclick.net/clk;258768047;13503038;j?
>> > http://info.appdynamics.com/FreeJavaPerformanceDownload.html
>> > _______________________________________________
>> > mod-security-developers mailing list
>> > mod...@li...
>> > https://lists.sourceforge.net/lists/listinfo/mod-security-developers
>> > ModSecurity Services from Trustwave's SpiderLabs:
>> > https://www.trustwave.com/spiderLabs.php
>>
>>
>>
>> --
>> “If debugging is the process of removing software bugs, then
>> programming must be the process of putting them in.” - Edsger Dijkstra
>>
>>
>> ------------------------------------------------------------------------------
>> Everyone hates slow websites. So do we.
>> Make your web apps faster with AppDynamics
>> Download AppDynamics Lite for free today:
>> http://ad.doubleclick.net/clk;258768047;13503038;j?
>> http://info.appdynamics.com/FreeJavaPerformanceDownload.html
>> _______________________________________________
>> mod-security-developers mailing list
>> mod...@li...
>> https://lists.sourceforge.net/lists/listinfo/mod-security-developers
>> ModSecurity Services from Trustwave's SpiderLabs:
>> https://www.trustwave.com/spiderLabs.php
>>
>
>
|