- From: Jon Ferraiolo <jferrai@us.ibm.com>
- Date: Fri, 16 May 2008 08:25:41 -0700
- To: Jonas Sicking <jonas@sicking.cc>
- Cc: "WAF WG (public)" <public-appformats@w3.org>, public-appformats-request@w3.org
- Message-ID: <OFA11D1A51.FC3055F8-ON8825744B.00538B46-8825744B.0054C013@us.ibm.com>
Jonas Sicking <jonas@sicking.cc> wrote on 05/15/2008 07:50:14 PM: > Jon Ferraiolo wrote: > > public-appformats-request@w3.org wrote on 05/15/2008 04:19:40 PM: > > > > > > > > > * Start with the current functionality of XDomainRequest > > > > * Rename it to something suitably vendor-neutral (DataRequest) > > > > * Keep the same basic handshaking approach from XDR where servers > > reject > > > > requests that don't have a DataRequest header and the browser rejects > > > > responses that don't have a DataRequestAllowed header > > > > * Add support for all of the same HTTP methods as in AC (i.e., not > > just > > > > GET and POST) > > > > * Like AC and JSONRequest, the request includes the originating domain > > > > that is making the cross-site request. (MS is likely to have heartburn > > > > over this one because XDR doesn't send the domain for privacy reasons, > > > > but maybe this can be a browser security preference where some > > browsers > > > > can set a default of don't-send-originating-domain) > > > > * Like XDomainRequest, there is a preflight check on all requests, but > > > > the preflight check follows the approach used in AC, where > > > > MyDataRequest.open(method, url) uses an OPTIONS request/response in > > the > > > > background for the pre-flight check > > > > * The OPTIONS request returns not only a DataRequestAllowed:1 header > > > > (per XDR) to indicate whether the given method is supported, but in > > some > > > > cases returns other headers that help with security, such as a Max-Age > > > > header (per AC) > > > > * Define another OPTIONS response header to allow a server to > > opt-in to > > > > transmission of cookies > > > > * Decide whether the random delay feature from JSONRequest is a > > good idea > > > > * NOTE: the resulting technology does not include client-side > > allow/deny > > > > processing > > > > * NOTE: the spec should SHOUT about vulnerability risks if certain > > > > features are turned on (such as allowing POST/PUT/DELETE or > > transmission > > > > of cookies) and about how the server should not trust what is in the > > > > request (such as the originating domain) > > > > > > It seems to me like with all these changes you rather end up with > > > something much more similar to AC than XDR. With differently named > > > headers (which of course matters very little). > > > > If you feel that the deltas versus AC, such as dropping the client-side > > allow/deny checking, are minor changes, fine with me! > > Not really, but I feel like that is a much smaller delta between what > you are proposing and the AC spec, than what you are proposing and the > XDR spec. I really don't care whether the starting point is AC or XDR or whatever, only that the proposal is acceptable to all and doesn't harm the security of the Web. > > Basically it looks like you are proposing the following changes to the > AC spec: > > * Changes to the names of various headers. E.g. "DataRequestAllowed" > rather than "Access-Control". This certainly can be discussion, but > overall seems pretty unimportant. My key point was unifying the security features from various proposals, not the names for the headers. > * Different syntax for the header to signal if access should be granted > or not. I.e. changes to the syntax for the Access-Control header. I > think this is basically the PEP discussion that has been raised a number > of times. Yes. Sorry if I continue to believe that domain-based allow/deny enforcement should be done on the server. > * Ability to opt in to / out of receiving cookies. This has already been > proposed in a thread started by Hixie ("Opting into cookies") so I > suggest we take that discussion there. My guess is that my opinions are already known: I would prefer that servers have to do something special to opt-in to transmission of cookies with a cross-site request. I expect there will be scenarios where some sites support POST without using cookies and some sites that naively use cookies without proper session checking. I would prefer to err on the side of carefulness. It isn't too much to ask a server developer to add an N+1th header to enable cookies. > * Investigate the random delay feature from JSONRequest. Please do start > this as a separate thread. OK > * Some editorial changes to the spec to make it more explicit about > various risks when opting into various features. Yes, but I wouldn't discount these editorial changes. In this case (i.e., cross-site requests), education is important, and the spec will be an important educational document. > > Am I missing something? > > In general I would suggest starting separate threads for the changes to > wish to do to the spec. This is how I would have like microsoft to have > done their XDR proposal too. I think that would have resulted in much > more productive and interesting discussions. > > > > Also, isn't doing the OPTIONS request moving the PEP into the client ;) > > > > One key thing is that the allow/deny logic has moved to the server. The > > OPTIONS request in effect is just an optimization thing. > > What? The client MUST not send a DELETE or POST request unless it has > checked with the server first, no? Or are you saying that the client MAY > do the OPTIONS request if it wants to, or it is allowed to just go ahead > and do send a DELETE request right away? No, the browser most definitely MUST honor the information sent back from the server. If a particular method is not allowed within a cross-site request, the browser MUST not send that request. What I was saying is that the server should not assume that the client is trustworthy and should not rely on client enforcement and instead should check every subsequent request. > > > The server > > should still check each request regardless of what it responded to the > > OPTIONS request. > > But legacy servers will not do that right? So in order to protect those > we need to rely on the client not sending harmful requests to them > before checking using OPTIONS that that is ok? Right. That's the only possible thing we can do about legacy servers. Jon > > / Jonas
Received on Friday, 16 May 2008 15:29:46 UTC