- From: Ian Hickson <ian@hixie.ch>
- Date: Tue, 11 Aug 2009 23:11:36 +0000 (UTC)
- To: Gervase Markham <gerv@mozilla.org>, Bil Corry <bil@corry.biz>, Daniel Veditz <dveditz@mozilla.com>, Anne van Kesteren <annevk@opera.com>
- Cc: Brandon Sterne <bsterne@mozilla.com>, dev-security@lists.mozilla.org, www-archive@w3.org, jonas@sicking.cc, Sid Stamm <sid@mozilla.com>
On Thu, 30 Jul 2009, Gervase Markham wrote:
> On 29/07/09 23:23, Ian Hickson wrote:
> > * Remove external policy files.
>
> I'm not sure how that's a significant simplification; the syntax is
> exactly the same just with an extra level of indirection, and if that
> makes things too complicated for you, don't use them.
Complexity affects everyone, not just those who use it.
> > * If there are multiple headers, fail to fully closed.
>
> How is this a simplification? It means that if there are multiple people
> (e.g. an ISP and their customer) who want input into the policy, the ISP
> or the customer has to manually merge and intersect the policies to make
> one header, rather than the browser doing it. In other words, the
> intersection code gets written 1000 times, often badly, rather than
> once, hopefully right.
I think in almost all cases, multiple headers will be a sign of an attack
or error, not the sign of cooperation.
> > * Combine img-src, media-src, object-src, frame-src
>
> But then the combined lotsofthings-src would have to be set to the
> intersection of all the above, which means e.g. far more potential
> sources of objects (in particular) than you might otherwise want.
> "object-src: none" sounds to me like a great idea for a load of sites
> which also want to display images.
>
> OTOH, "lotsofthings-src: host1.com host2.com host3.com" would still be a
> big improvement over now, where we effectively have "lotsofthings-src:
> all".
I think simplification is a win here, even if it makes the language less
expressive. Obviously, it's a judgement call. I'm just letting you know
what I think is needed to make this good.
> > I'm concerned that people will eventually do something that causes the
> > entire policy to be ignored, and not realise it ("yay, I fixed the
> > problem") or will do something that other people will then copy and
> > paste without understanding ("well this policy worked for that site...
> > yay, now I'm secure").
>
> These would be issues with any possible formulation.
It's dramatically reduced if the format fails safe and is of minimal
expressiveness.
> > > I imagine sites starting with the simplest policy, e.g. "allow
> > > self", and then progressively adding policy as required to let the
> > > site function properly. This will result in more-or-less minimal
> > > policies being developed, which is obviously best from a security
> > > perspective.
> >
> > This is maybe how competentely written sites will do it. It's not how
> > most sites will do it.
>
> How do you expect them to do it?
Copy-and-paste from sites that didn't understand the spec, for example
copying from w3schools.com, and then modifying it more or less at random.
Or copy-and-paste from some other site, without understanding what they're
doing.
> That's like saying "some people will start their Ruby on Rails web
> application by writing it full of XSS holes, and then try and remove
> them later". This may be true, but we don't blame Ruby on Rails. Do we?
Ruby on Rails isn't purporting to be a standard.
> > You are assuming the person reading all this is familiar with security
> > concepts, with Web technologies, with "whitelists" and wildcards and
> > so on. This is a fundamentally flawed assumption.
>
> I don't see how we could change CSP to make it understandable to people
> unfamiliar with Web technologies and wildcards. I think almost everyone
> is familiar with the concept of a whitelist, but perhaps under a
> different name. Any suggestions?
I think the dramatic simplification I described would be a good start. I'd
have to look at the result before I could really say what else could be
done to make the language safer for novices.
On Thu, 30 Jul 2009, Daniel Veditz wrote:
> >
> > * Drop the "allow" directive, default all the directives to "self"
>
> "allow" is an important simplification.
I don't think that making policies shorter is the same as simplification.
In fact, when it comes to security policies, I think simplicity
corresponds almost directly to how explicit the language is. Any
implications can end up tripping up authors, IMHO.
> > We could remove many of the directives, for example. That would make
> > it much shorter.
>
> Make what shorter? The spec, certainly, but probably not the typical
> policy. And if a complex policy needed those directives then eliminating
> them hasn't really helped.
Making the spec shorter is a pretty important part of simplifying the
language. The simpler the spec, the more people will be able to understand
it, the fewer mistakes will occur.
--
Ian Hickson U+1047E )\._.,--....,'``. fL
http://ln.hixie.ch/ U+263A /, _.. \ _\ ;`._ ,.
Things that are impossible just take longer. `._.-(,_..'--(,_..'`-.;.'
Received on Tuesday, 11 August 2009 23:17:41 UTC