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. 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

