This message seems to have disappeared, resending...

Alex Busenius wrote:
> On 03/16/2010 10:23 AM, Caleb James DeLisle wrote:
>>
>> Marius Dumitru Florea wrote:
>>> Hi Caleb,
>>>
>>> Caleb James DeLisle wrote:
>>>> I don't want this proposal to die because of unnecessary noise which I 
>>>> introduced,
>>>> I have thought about it and I am in agreement with the general idea of 
>>>> sending the user a hash which
>>>> must be returned with the post in order for the data to be saved.
>>>>
>>>> I don't like adding code to xwiki-core so I suggest this be made into a 
>>>> component.
>>>> We would need 2 functions:
>>>> String getToken()
>>>> boolean isTokenValid(String token)
>>>>
>>>> getToken uses org.xwiki.bridge.DocumentAccessBridge.getCurrentUser() to 
>>>> get the user who called it
>>>> and the user name is stored in a HashMap of <String, String> with a random 
>>>> string of text.
>>>>
>>>> If getToken finds a token already in the map, it returns that token (so it 
>>>> may be called multiple times
>>>> in the generation of a page)
>>> So the token is the same for consecutive (GET) requests coming from the 
>>> same user?
>>>
>>>> isTokenValid checks the current user against the token then removes the 
>>>> entry from the HashMap so the token
>>>> may not be reused.
>>> What happens if the user opens in edit mode two different pages? Isn't 
>>> the second save invalidated by the first save?
>> Good point I missed. I would have to have a script to disable such an 
>> onerous 'feature' :)
>> I guess it will only work if a single number is valid basically forever. I 
>> wish components had access to the
>> Request, Response and Session so it could expire on logout.
> 
> What if this map would store a mapping (user + url) -> token,
URL sounds like a good idea, what are the chances that a user will be editing 
the same page in 2 windows? Even if
they are, editing the same page will cause past changes to be lost. Perhaps if 
the token fails they should get a
page with a warning message and an opportunity to save anyway.
We can compare the URL to the referrer header which makes life easy (we would 
need access to the request but I
think this is coming soon.)

> or (user +
> reason) -> token, where "reason" would be some description of the
> intended change like "edit:Main.Test" or "rights:SomeUser+comment-edit"?
This idea sounds like it would require a lot of extra infrastructure, maybe I 
am not seeing it right.
> 
> getToken would return different tokens for different pages/"reasons" and
> isTokenValid would need to provide the same url/"reason" for check to
> succeed.
> 
> 
>> Caleb
>>
>>> Thanks,
>>> Marius
>>>
>>>> If a configuration parameter is specified to disable the component, 
>>>> getToken returns "" and isTokenValid
>>>> returns true.
>>>>
>>>> WDYT?
>>>>
>>>> Caleb
>>>>
>>>>
>>>> Caleb James DeLisle wrote:
>>>>> Sergiu Dumitriu wrote:
>>>>>> On 03/10/2010 07:44 PM, Caleb James DeLisle wrote:
>>>>>>> Take a look at the "sammy is my hero" worm, myspace sent a hash to the 
>>>>>>> user like the one you propose,
>>>>>>> the worm made the required get request to get the hash, then made the 
>>>>>>> post along with the hash.
>>>>>>> What prevents javascript from opening the page with the hash in an 
>>>>>>> iframe and then reading in the iframe
>>>>>>> to get the hash, then creating a form with the required data and 
>>>>>>> posting it to the save action?
>>>>>>>
>>>>>>> If we were to combine a requirement for post requests with checking of 
>>>>>>> the referrer header, then we
>>>>>>> would block links, forms and javascript based attacks leaving only an 
>>>>>>> attack through older versions
>>>>>>> of flash which support referrer forgery and at this point the 
>>>>>>> difficulty of the attack becomes such that
>>>>>>> we need to consider a wider array of attack vectors.
>>>>>> Sammy also required that XSS is enabled.
>>>>>>
>>>>>> Protecting from attacks originating in the wiki is kind of impossible at 
>>>>>> the moment, since JS can be inserted anywhere, and there's no (nice) way 
>>>>>> to prevent attacks from JS inside the application. As long as JS can be 
>>>>>> inserted, an attacker can do all the steps that the client would do to 
>>>>>> perform an action.
>>>>>>
>>>>>> The secret token works as a prevention mechanism when the attack comes 
>>>>>> from another site because the browser security model prevents the attack 
>>>>>> code to read the form.
>>>>> I just did a few tests on iframes and I was wrong, they do have good same 
>>>>> origin policy.
>>>>>
>>>>> Caleb
>>>>>
>>>>>>> Caleb
>>>>>>>
>>>>>>>
>>>>>>> Alex Busenius wrote:
>>>>>>>> Unfortunately, using POST requests instead of GET requests is not
>>>>>>>> enough. It will not prevent attacks that use forms and/or JavaScript to
>>>>>>>> generate POST requests.
>>>>>>>>
>>>>>>>> Alex
>>>>>>>>
>>>>>>>>
>>>>>>>> On 03/09/2010 02:48 PM, Caleb James DeLisle wrote:
>>>>>>>>> I had thought about proposing this myself but decided against it 
>>>>>>>>> because it seems
>>>>>>>>> to me like a workaround for problems which can be solved in other 
>>>>>>>>> ways.
>>>>>>>>>
>>>>>>>>> Suppose we were to add a check to the actions which alter data which 
>>>>>>>>> made sure the request method
>>>>>>>>> was 'post' and made it configurable in one of the configuration 
>>>>>>>>> files? We would have
>>>>>>>>> to look over the default skins for incorrect links and leave the 
>>>>>>>>> configuration
>>>>>>>>> option off by default for backward compatibility at least until the 
>>>>>>>>> next major version
>>>>>>>>> but we could provide wiki operators the ability to prevent CSRF.
>>>>>>>>>
>>>>>>>>> Caleb
>>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> devs mailing list
>>>>>>>> [email protected]
>>>>>>>> http://lists.xwiki.org/mailman/listinfo/devs
>>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> devs mailing list
>>>>>>> [email protected]
>>>>>>> http://lists.xwiki.org/mailman/listinfo/devs
>>>>>>>
>>>>> _______________________________________________
>>>>> devs mailing list
>>>>> [email protected]
>>>>> http://lists.xwiki.org/mailman/listinfo/devs
>>>>>
>>>> _______________________________________________
>>>> devs mailing list
>>>> [email protected]
>>>> http://lists.xwiki.org/mailman/listinfo/devs
>>> _______________________________________________
>>> devs mailing list
>>> [email protected]
>>> http://lists.xwiki.org/mailman/listinfo/devs
>>>
>> _______________________________________________
>> devs mailing list
>> [email protected]
>> http://lists.xwiki.org/mailman/listinfo/devs
>>
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs
> 


_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to