Here's a proof of concept with OKDO. It's not that bad specifying the OKDO list


In a config... (you could also do OKDO=: ... in config )

OKDO_jhs_ =:  , ,&'_jquerydemo_' each ;: names_jquerydemo_ 3
OKDO_jhs_ =: OKDO_jhs_ , (<'jev_get_jfilesrc_') NB. needed for external files
OKDO_jhs_ =: OKDO_jhs_ , (<'jev_jquerydemo_') NB. needed for posts


jhscfg=: 3 : 0
..
if. _1=nc<'OKDO' do. OKDO=: '' end. NB. verbs allowed without login
...
)


main changes:

NB. J needs input - y is prompt - '' '   ' '      '
input=: 3 : 0
logapp 'jhs input prompt: ',":#y

try.
if. _1~:SKSERVER do. try. ".'urlresponse_',URL,'_ y' catch. end. end. NB. jijx
if. _1~:SKSERVER do. jbad'' end.
getdata'' NB. get and parse http request

checkAuth =. (0~:#PASS)*.(1~:+/cookie E.
gethv'Cookie:')*.-.LHOK*.PEER-:LOCALHOST

if. 1=NVDEBUG do. smoutput seebox NV end. NB. HNV,NV
if. (-.(<URL)e.boxopen OKURL)*.checkAuth
                       do. r=. 'jev_get_jlogin_ 0'
elseif. 1=RAW          do. r=. 'jev_post_raw_',URL,'_'''''
elseif. 'post'-:METHOD do. r=. getv'jdo'
elseif. '.'e.URL       do. r=. 'jev_get_jfilesrc_ URL_jhs_'
elseif. 1              do. r=. 'jev_get_',URL,'_'''''
end.
logapp 'jhs sentence: ',r
if. JZWSPU8-:3{.r do. r=. 3}.r end. NB. empty prompt kludge
rparts =. ;: r

NB. check to see if OKDO is specified,
NB. if so then the sentence must exist in the list and only two words
can be specified
if. checkAuth *. (#OKDO) *. ((-.((0{rparts) e. OKDO)) +. (# rparts) > 2)
                        do.
                        r=. 'jev_get_jlogin_ 0'
                        logappx 'not auth', (0{:: rparts)
end.

r

catch.
 logappx 'input error'
 exit'' NB. 2!:55[11 crashes
end.
)




On Thu, Nov 10, 2016 at 3:14 PM, Joe Bogner <[email protected]> wrote:
> I am working with a JHS app and trying to secure it so only approved J
> expressions can run. Does JHS offer that capability?
>
> I can use OKURL to lock down the URL
>
> Example:
>
> OKURL_jhs_ =: 'jdemo1';'
>
> However, I can still send arbitrary J expressions to be evaluated
>
> For example, I can run a bookmarklet to include jquery on the page (or
> just use XmlHttpRequest directly)
>
> I can send expressions easily from the javascript console
>
> I can cause the process to exit
>
> $.post("/jdemo1", { jdo:"exit''"}, function(resp) { console.log(resp) })
>
> Or I can reset the username/password for jijx
>
> $.post("/jdemo1", { jdo:"PASS_jhs_ =: 'abc' [ USER_jhs_=:'abc'"},
> function(resp) { console.log(resp) })
>
>
> I am thinking something needs to be added to input in core.ijs  to either:
>
> a.  check against a list of expressions in OKDO .... which would be
> tedious to specify every action or
>
> b.  to only allow expressions that match a verb in the app locale.
> Would that close up this security hole?
>
> For example, to turn on the flag would only allow these verbs to run
> -- input would return an error if the jdo did not match one of these
> verbs
>
>    '' names_jdemo1_ 3
> create        ev_roll_click jev_get
>
>
> Regardless of the solution OKURL has a serious security hole
> considering the username/password can be reset from a simple page.
>
> Thoughts?
>
>
> core.ijs:
>
>
> NB. J needs input - y is prompt - '' '   ' '      '
> input=: 3 : 0
> logapp 'jhs input prompt: ',":#y
> try.
> if. _1~:SKSERVER do. try. ".'urlresponse_',URL,'_ y' catch. end. end. NB. jijx
> if. _1~:SKSERVER do. jbad'' end.
> getdata'' NB. get and parse http request
> if. 1=NVDEBUG do. smoutput seebox NV end. NB. HNV,NV
> if. (-.(<URL)e.boxopen OKURL)*.(0~:#PASS)*.(1~:+/cookie E.
> gethv'Cookie:')*.-.LHOK*.PEER-:LOCALHOST
>                        do. r=. 'jev_get_jlogin_ 0'
> elseif. 1=RAW          do. r=. 'jev_post_raw_',URL,'_'''''
> elseif. 'post'-:METHOD do. r=. getv'jdo'
> elseif. '.'e.URL       do. r=. 'jev_get_jfilesrc_ URL_jhs_'
> elseif. 1              do. r=. 'jev_get_',URL,'_'''''
> end.
> logapp 'jhs sentence: ',r
> if. JZWSPU8-:3{.r do. r=. 3}.r end. NB. empty prompt kludge
> r NB. J sentence to run
>
> catch.
>  logappx 'input error'
>  exit'' NB. 2!:55[11 crashes
> end.
> )
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to