I'm fine with 1. coupled with a default CSP in the template application.

For older apps not written from scratch, we can perhaps strongly suggest
installing the legacy-whitelist, which would change the default-open
behaviour to default-closed.

Together, that would give sensible defaults that aren't open-to-everything?

-Michal

On Fri, Dec 12, 2014 at 9:13 AM, Ian Clelland <iclell...@chromium.org>
wrote:

> I'm just building the new optional whitelist plugins for Cordova Android
> and iOS 4.x, and I'm thinking about how to encourage developers to use CSP
> for network requests, as opposed to a
> Cordova-implemented-whitelist-which-probably-leaks-like-a-sieve.
>
> (Note: This is really just about things like XHR requests, <img> and
> <script> tags, etc, which are historically the only things that we've
> reliably been able to filter out. Other classes of network requests just
> bypass all of our code anyway, which sucks, and frame navigation and
> external application launches are already well handled by the framework).
>
> The policy I've implemented on the unplug-whitelist branches, which at
> first thought at least *sounds* sane, is that network requests are blocked
> by default. (At least all of the ones that we can intercept). That way, a
> plugin, such as the legacy-whitelist plugin, can open up access to specific
> resources, and the fallback is safety.
>
> To use CSP, though, we have to open up access to the outside, and we don't
> necessarily know what the developer wants to open (the whole point is that
> they specify in the HTML, not in a config file.) The easiest way is to open
> up access to *all* resources to the webview, and then restrict it through
> the CSP header/meta-tag, which does a better job of blocking those requests
> than we do in any case.
>
> I think that we want to encourage developers to use CSP, for a lot of
> reasons, but I'm going to have to do one of these things, and I'm not
> entirely sure which is the right one:
>
> 1. Open access to all network resources by default in Cordova 4.x.
>   * This doesn't apply to navigations, or launching other apps. They're
> still blocked by default.
>   * Any plugin implementing shouldAllowRequest would still be able to turn
> this into a disallow-by-default whitelist
>   * We can't block everything anyway (see websockets, audio/video streams /
> probably more), so it removes the illusion that we can.
>
> 2. Make another whitelist-y plugin, something like "org.apache.cordova.csp"
> that exists only to open up access to network resources. Direct all users
> who want to use CSP to install that plugin first
>   * It's a 4th network plugin (after legacy-whitelist, navigation-whitelist
> and intent-whitelist)
>   * Adding it doesn't actually add any CSP protection, so it probably needs
> a better name
>   * It's an extra step that may confuse people and limit adoption
>
> 3. Do something crazy. Maybe a CSP plugin that automatically creates CSP
> tags *and* updates the XHR whitelist, both from config directives.
>   * Lots more work
>   * We probably don't know enough about real requirements to get this right
>   * If CSP is doing its job, then the XHR whitelist isn't needed anyway; it
> would just be another layer that isn't doing anything different.
>
> I'm leaning towards #1, but its a it's a decision that we really should
> think about and decide on-list before moving forward.
>
> Ian
>

Reply via email to