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)

isTokenValid checks the current user against the token then removes the entry 
from the HashMap so the token
may not be reused.

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

Reply via email to