[tahoe-dev] [tahoe-lafs] #127: Cap URLs leaked via HTTP Referer header

tahoe-lafs trac at allmydata.org
Thu Oct 29 14:40:45 PDT 2009


#127: Cap URLs leaked via HTTP Referer header
-------------------------------+--------------------------------------------
 Reporter:  warner             |           Owner:           
     Type:  defect             |          Status:  new      
 Priority:  major              |       Milestone:  undecided
Component:  code-frontend-web  |         Version:  0.7.0    
 Keywords:  security           |   Launchpad_bug:           
-------------------------------+--------------------------------------------

Comment(by davidsarah):

 Replying to [comment:20 davidsarah]:
 > However, I'm not sure that options B or C work for what we are trying to
 do.

 Actually there's a variant of B that will work: send the read cap in the
 form data. You would make an initial request to the gateway for a given
 read cap encoded in the URL, and would get back a stub page containing a
 form filled in with that read cap. If that form is POSTed to the gateway,
 it would respond with the real file. When POST is used, the URL of the
 latter would just be the URL of the form, which is not sensitive, so it
 doesn't matter whether it is leaked via Referer.

 This approach needn't depend on !JavaScript, but if you don't have
 !JavaScript the user would have to click a button to submit the form. (Is
 there a way to do that automatically on page load even if scripting is
 disabled?) Alternatively the server could set a cookie and have that
 cookie echoed back to it with an HTTP-Refresh, but that potentially
 introduces other cookie-related weaknesses and complications.

 In the case where the referring page is generated by the gateway (for
 example a directory listing), then that page can directly include a form
 for each file link, so there is no extra request or button click even when
 scripting is disabled.

 If you can depend on !JavaScript, you can combine this with Tyler's
 approach and put the sensitive part of the URL in the fragment, then have
 a script copy it to the form data. The difference is that because form
 submission is used instead of XMLHttpRequest, you can download arbitrary
 files rather than just displaying them.

 A disadvantage of using POST is that if the user goes back to an URL via
 the history, they will get a spurious prompt asking whether they want to
 resubmit form data. (Using GET won't work, because then the read cap would
 still be in the URL.) I think this is acceptable, though.

-- 
Ticket URL: <http://allmydata.org/trac/tahoe/ticket/127#comment:21>
tahoe-lafs <http://allmydata.org>
secure decentralized file storage grid


More information about the tahoe-dev mailing list