From 673c563e20e21c9be0cfadb447bacc10675dd414 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexis=20M=C3=A9taireau?= Date: Wed, 30 Jan 2013 18:18:30 +0100 Subject: [PATCH] updating the cors article with some feedback --- content/images/cors_flow.png | Bin 0 -> 20718 bytes content/python/cornice-cors.rst | 254 ++++++++++++++++++++++++++++++++ pelican.conf.py | 5 +- 3 files changed, 257 insertions(+), 2 deletions(-) create mode 100644 content/images/cors_flow.png create mode 100644 content/python/cornice-cors.rst diff --git a/content/images/cors_flow.png b/content/images/cors_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..63b8be8f5e8de793ffe2c9504a6f1bf6d1d8a985 GIT binary patch literal 20718 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 LzgOel$g_V3vhcbA literal 0 HcmV?d00001 diff --git a/content/python/cornice-cors.rst b/content/python/cornice-cors.rst new file mode 100644 index 0000000..b9f4db9 --- /dev/null +++ b/content/python/cornice-cors.rst @@ -0,0 +1,254 @@ +Implementing CORS in Cornice +############################ + +:date: 22-01-2013 +:slug: cross-origin-in-cornice +:status: draft + +For security reasons, it's not possible to do cross-domain requests. In other +words, if you have a page served from the domain `lolnet.org`, it will not be +possible for it to get data from `notmyidea.org`. + +Well, it's possible, using tricks and techniques like `JSONP +`_, but that doesn't work all the time (see +`the section below <#how-this-is-different-from-jsonp>`_). I remember myself +doing some simple proxies on my domain server to be able to query other's API. + +Hopefuly, there is a nicer way to do this, namely, "Cross Origin +Resource-Sharing", or `CORS `_. + +You want an icecream? Go ask your dad first. +============================================ + +If you want to use CORS, you need the API you're querying to support it; on the +server side. + +The HTTP server need to answer to the `OPTIONS` verb, and with the appropriate +response headers. + +`OPTIONS` is sent as what the authors of the spec call a "preflight request"; +just before doing a request to the API, the *User-Agent* (the browser most of +the time) asks the permission to the resource, with an `OPTIONS` call. + +The server answers, and tell what is available and what isn't: + +.. image:: |filename|/images/cors_flow.png + :alt: The CORS flow (from the HTML5 CORS tutorial) + +- 1a. The User-Agent, rather than doing the call directly, asks the server, the + API, the permission to do the request. It does so with the following headers: + + - **Access-Control-Request-Headers**, contains the headers the User-Agent + want to access. + - **Access-Control-Request-Method** contains the method the User-Agent want + to access. + +- 1b. The API answers what is authorized: + + - **Access-Control-Allow-Origin** the origin that's accepted. Can be `*` or + the domain name. + - **Access-Control-Allow-Methods** a *list* of allowed methods. This can be + cached. Note than the request asks permission for one method and the + server should return a list of accepted methods. + - **Access-Allow-Headers** a list of allowed headers, for all of the + methods, since this can be cached as well. + +- 2. The User-Agent can do the "normal" request. + + +So, if you want to access the `/icecream` resource, and do a PUT there, you'll +have the following flow:: + + > OPTIONS /icecream + > Access-Control-Request-Methods = PUT + > Origin: notmyidea.org + < Access-Control-Allow-Origin = notmyidea.org + < Access-Control-Allow-Methods = PUT,GET,DELETE + 200 OK + +You can see that we have an `Origin` Header in the request, as well as +a `Access-Control-Request-Methods`. We're here asking if we have the right, as +`notmyidea.org`, to do a `PUT` request on `/icecream`. + +And the server tells us that we can do that, as well as `GET` and `DELETE`. + +I'll not cover all the details of the CORS specification here, but bear in mind +than with CORS, you can control what are the authorized methods, headers, +origins, and if the client is allowed to send authentication information or +not. + + +A word about security +===================== + +CORS is not an answer for every cross-domain call you want to do, because you +need to control the service you want to call. For instance, if you want to +build a feed reader and access the feeds on different domains, you can be +pretty much sure that the servers will not implement CORS, so you'll need to +write a proxy yourself, to provide this. + +Secondly, CORS, if misunderstood, can be unsecure, and cause some security +problems. Because the rules apply when a client want to do a request to +a server, you need to be extra careful about who you're authorizing. + +A CORS uncorrectly-secured server can be accessed by a client very easily, +bypassing the network security. For instance, if a service runs on an intranet, +only available from behind a VPN, and accepts every cross-origin call, then +anyone service javascript files to the browser of an user with access to this +service could make calls there, which is probably not what you want. + + +How this is different from JSONP? +================================= + +You may know the `JSONP `_ protocol. JSONP +Allows to do cross origin, but for a particular use case, and do have some +drawbacks (for instance, it's not possible to do DELETEs or PUTs with JSONP. + +JSONP exploits the fact that's possible to get information from another domain +when you are asking for javascript code, using the `