Bonnes Pratiques Web & Cloud
58.8K views | +5 today
Follow
Bonnes Pratiques Web & Cloud
Administration cloud et développement web
Curated by Mickael Ruau
Your new post is loading...
Your new post is loading...

Popular Tags

Current selected tag: 'CORS - partage des ressources entre origines multi'. Clear
Scooped by Mickael Ruau
Scoop.it!

Same-origin policy - Sécurité Web | MDN

Same-origin policy - Sécurité Web | MDN | Bonnes Pratiques Web & Cloud | Scoop.it
La same-origin policy restreint la manière dont un document ou un script chargé depuis une origine peut interagir avec une autre ressource chargée depuis une autre origine.
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

JSONP vs CORS - la guerre du cross-domaine

Explication de la différence entre JSONP et CORS
Mickael Ruau's insight:

Tous les jours, on envoie des requêtes AJAX à droite à gauche, sans vraiment y réfléchir. Et puis vient un jour, où on doit envoyer une requête AJAX sur un autre domaine que le sien, et tout part en sucette.

Quand on se retrouve face à ce choix, il existe 2 solutions : JSONP et CORS.

No comment yet.
Scooped by Mickael Ruau
Scoop.it!

AJAX cross-domain – AWS

Deux documents ne provenant pas du même domaine ne peuvent pas accéder aux contenus respectifs :

  • Pas d’accès au DOM, aux cookies, aux URLs, …
  • Pas d’accès entre fenêtres et entre frames.

Cependant

  • Les scripts inclus avec <script> ont plein accès (conséquence : SOP ne peut pas bloquer le JavaScript injecté) ;
  • Autres balises violant la SOP (et pour cause) : <img>, <link>, <embed>, <object>, <iframe>, <bgsound>, <audio>, <video>, …
  • window.name viole la SOP (pas très utilisé) ;
  • window.postMessage : violation contrôlée de la SOP.
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

XSS, CORS, CSRF (Partie 3)

XSS, CORS, CSRF (Partie 3) | Bonnes Pratiques Web & Cloud | Scoop.it

Bienvenue dans ce dernier volet de notre Saga XSS (partie 1, partie 2).

Dans notre précédent article nous avions récupéré un cookie de session insuffisamment sécurisé grâce à une vulnérabilité XSS.

Mickael Ruau's insight:

La première chose pour un site souhaitant faire du CORS est de bien positionner les origines autorisées avec le header Access-Control-Allow-Origin. Ce dernier doit stipuler explicitement les origines autorisées pour bénéficier pleinement de l’utilisation des XHR (rappelons que l’utilisation de ces headers concernent les XmlHttpRequest, une iframe par exemple n’émettra pas de header Origin et sera soumise à la Same Origin Policy).

No comment yet.
Scooped by Mickael Ruau
Scoop.it!

AJAX — Programmation Web Client Riche

XMLHttpRequest possède des limitations :

  • il ne peut pas accéder aux URLs en file:,
  • le code émis par un serveur ne peut se connecter qu’à ce même serveur (Same Origin Policy),
  • ou à un serveur autorisant explicitement les accès par d’autres scripts que les siens (standard CORS).

CORS en deux mots

  • Lorsqu’un script, provenant d’un serveur srv1, émet une requête AJAX vers un serveur srv2, cette requête contient un en-tête supplémentaire :

    Origin: http://srv1

  • Si le serveur srv2 fait confiance à srv1, il inclue dans sa réponse l’en-tête suivant :

    Access-Control-Allow-Origin: http://srv1

  • ... et le navigateur autorise alors le script à accéder à la réponse.

  • Dans le cas contraire, le navigateur refuse de transmettre la réponse au script. Du point de vue du script, c’est comme si la requête avait échoué.

Note

  • CORS est un standard récent encore peu supporté par les serveurs.
  • Une solution consiste à utiliser un proxy tel que https://crossorigin.me/ .
  • Auparavant, d’autres méthodes ont été proposées pour permettre des accès cross-domain, comme JSONP.
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Bypass CORS Errors When Testing APIs Locally

Bypass CORS Errors When Testing APIs Locally | Bonnes Pratiques Web & Cloud | Scoop.it
Make configuration changes to your web browser or run a local server to bypass CORS and other cross origin problems when testing APIs locally.
Mickael Ruau's insight:

Ask the server owner politely to add CORS support

It doesn’t take much effort to enable cross origin resource sharing on a server. As mentioned on enable-cors.org, the owner only needs to add Access-Control-Allow-Origin: * to the response header. There are even instructions on how to do this in various programming languages, all of which are not too difficult and make a world of difference to developers experiencing these errors.

No comment yet.
Scooped by Mickael Ruau
Scoop.it!

A practical guide to CORS – Thomas Wang –

Web pages are under the restrictions of same-origin policy, which means scripts contained in a web page cannot access data in another page with different origin. For example…
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Requête Ajax Cross-domain via un proxy — Pascal MARTIN : développement Web & PHP

Nous avons vu au cours d’un précédent article comment contourner la limitation de Same Origin Policy en utilisant la balise <script> pour effectuer des requêtes Ajax vers un serveur distant (nom de domaine différent du nom de domaine sur lequel notre application est déployée).

Cette solution nous imposait de modifier notre code côté navigateur, pour ne plus utiliser une instance d’object XMLHttpRequest, mais passer par de la génération dynamique de balises HTML <script>.

Nous allons à présent voir comment effectuer des requêtes Ajax distantes en passant par un proxy, de manière à ne pas avoir à ré-écrire tout notre code de chargement de données depuis l’application HTML+Javascript.

Nous commencerons par l’écriture d’un proxy en PHP, par lequel nous passerons pour effectuer nos appels Ajax, et, en seconde partie, nous verrons comment utiliser les fonctionnalités de proxy-ing du serveur Web Apache, pour ne pas avoir à écrire nous-même le proxy.

No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Getting CORS Working

Recently I ran a workshop where I ran a small section of the workshop on CORS and how to enable it. In the past, I've found it to be very easy but this time around everything backfired and it didn't work. So after the workshop I went about understanding why the CORS demo it didn't work, and how to get it working.

Mickael Ruau's insight:

Cross Origin Resource Sharing - i.e. cross domain Ajax. The technical side of getting CORS to work has been explained in a lot more detail by Nicholas C. Zakas in his article Cross-domain Ajax with Cross-Origin Resource Sharing, (i.e. IE8, for reasons beyond most, use XDomainRequest - utterly bespoke - but that's Microsoft for you).

No comment yet.
Scooped by Mickael Ruau
Scoop.it!

enable cross-origin resource sharing

CORS introduces a standard mechanism that can be used by all browsers for implementing cross-domain requests. The spec defines a set of headers that allow the browser and server to communicate about which requests are (and are not) allowed. CORS continues the spirit of the open web by bringing API access to all.

No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Accès refusé

Documentation du navigateur Microsoft Edge pour l'erreur "XMLHttpRequest: Erreur réseau 0x41, Accès au réseau refusé."

Mickael Ruau's insight:

Un script a essayé d'accéder aux données à partir d'une source autre que l'hôte de la page actuelle. La stratégie d'origine suivie par Internet Explorer et d'autres navigateurs permet aux scripts d'accéder aux données uniquement à partir de sources avec les mêmes schéma, hôte et port de l'URL de la page actuelle.

Par exemple, si la page actuelle est https://employees.mycompany.com, vous ne pouvez pas accéder aux données à partir des URL suivantes :

Pour corriger cette erreur

  • Vérifiez si l'API que vous essayez d'appeler prend en charge JSONP ou CORS, qui sont deux approches qui autorisent en toute sécurité les scripts cross-origin.

  • Si vous essayez d'appeler une API REST, refactorisez cet appel vers votre code côté serveur, puis exposez un nouveau point de terminaison REST pour vos scripts côté client.

    Pour plus d'informations, recherchez la documentation en ligne relative à la stratégie d'origine, JSONP et CORS.

No comment yet.
Scooped by Mickael Ruau
Scoop.it!

The day I understood CORS. CORS is the kind of bad word I have… | by Lorie Pisicchio | graviteeio | Sep, 2020

The day I understood CORS. CORS is the kind of bad word I have… | by Lorie Pisicchio | graviteeio | Sep, 2020 | Bonnes Pratiques Web & Cloud | Scoop.it
CORS is the kind of bad word I have tried to avoid for years ! Even when I moved to a full-stack position and started to work on webapps, I willingly ignored it. But then, I joined Gravitee.io, and…
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Problèmes d’alertes de contenus mixtes sur votre site SSL ?

Problèmes d’alertes de contenus mixtes sur votre site SSL ? | Bonnes Pratiques Web & Cloud | Scoop.it
Lorsqu’ils consultent des sites protégés par SSL, les visiteurs s’attendent à être en sécurité et protégés – ce qu’ils sont en droit d’exiger. Lorsqu’un site ne protège ou ne sécurise pas intégralement ses contenus, le navigateur affiche une alerte de type « contenu mixte ».
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Sécurisez votre site web avec les headers HTTP

Sécurisez votre site web avec les headers HTTP | Bonnes Pratiques Web & Cloud | Scoop.it
Liste des headers HTTP permettant de configurer certains aspects techniques de votre site, et en particulier la sécurité.
Mickael Ruau's insight:

lutôt que de réécrire des spécifications techniques et d’expliquer en détails le fonctionnement des headers HTTP, nous allons vous fournir une analyse synthétique et une liste de liens intéressants que vous pourrez parcourir si vous souhaitez creuser le sujet.
La première chose importante à garder à l’esprit est que ces headers ont un impact sur les navigateurs web. Ils donnent des directives aux navigateurs pour leurs comportements (s’ils implémentent les fonctionnalités correspondantes). Ils ne modifient pas le comportement du serveur web.

Nous allons présenter les headers suivants :

  • Strict-Transport-Security
  • CORS headers (Access-Control-Allow-Origin)
  • Content-Security-Policy
  • X-Content-Type-Options
  • X-XSS-Protection
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Tracking : Comment réaliser un suivi cross-sites complet avec Google Analytics ?

Tracking : Comment réaliser un suivi cross-sites complet avec Google Analytics ? | Bonnes Pratiques Web & Cloud | Scoop.it
La spécificité du tracking cross-domain tient à la nécessité de mettre un place un suivi de performance sur plusieurs domaines au lieu d’un seul, en garantissant une continuité du suivi dans Google Analytics (GA).
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

enable cross-origin resource sharing

enable cross-origin resource sharing | Bonnes Pratiques Web & Cloud | Scoop.it

There are some more headers and settings involved if you want to support verbs other than GET/POST, custom headers, or authentication. You can learn more about these options in the Using CORS tutorial on HTML5 Rocks.

 

If you want the TL;DR version, take a look at the flowchart for implementing CORS support.

If you'd like to learn more about implementing CORS for a specific platform, follow one of the links below:

No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Démystifier CORS (Cross-Origin Resource Sharing) : Inovia Blog

Démystifier CORS (Cross-Origin Resource Sharing) : Inovia Blog | Bonnes Pratiques Web & Cloud | Scoop.it

Depuis des années, les navigateurs restreignent l’accès à des ressources n’appartenant pas au domaine depuis lequel un document a été chargé (règle dite de Same-Origin Policy).
Le fait que la balise script ne soit pas concernée par cette restriction a ouvert la voie à la technique JSONP(JSON with padding), permettant d’émettre des requêtes AJAX cross-domain retournant des données JSON encapsulées dans une fonction de rappel (callback) en JavaScript. Il faut admettre cependant que cette technique, bien qu’encore très utilisée, relève surtout de l’astuce.

CORS est un mécanisme robuste et normalisé par le W3C permettant à tout navigateur compatible d’effectuer des requêtes HTTP cross-domain. Il a valeur de standard industriel et étend le champ des possibilités bien au delà de ce qui est actuellement permis par JSONP.

JSONP est très pratique pour partager des données publiques (comprendre non sensibles).
Néanmoins, cette technique ne supporte pas les méthodes POST, PUT, DELETE (seule la méthode GET est supportée). Elle n’est donc à priori pas adaptée pour exposer une API JSON sauf à mettre en place des solutions de contournement (méthode HTTP transmise via un paramètre de requête, contrôles d’accès, etc.).

No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Accéder à une API cross-domain depuis Javascript avec CORS et un reverse proxy nginx

Cross-Origin Resource Sharing (CORS) est une spécification du W3C permettant les requêtes cross-domain depuis les navigateurs compatibles. Si l’API que vous interrogez est compatible avec CORS, vous pourrez accéder à l’API même si elle n’est pas sur le même domaine que votre application.

CORS est compatible avec :

  • Chrome 3+
  • Firefox 3.5+
  • Opera 12+
  • Safari 4+
  • Internet Explorer 8+

Pour utiliser CORS il faut envoyer au serveur des headers de contrôle d’accès qu’il inspectera pour approuver ou non la requête. Ces headers de contrôle d’accès décriront le contexte de la requête, sa méthode HTTP, son origine, ses headers custom, …

Selon le type de requête, ces headers sont envoyés automatiquement par le navigateur avec la requête ou dans une requête préliminaire (preflight request). La requête aboutira si le serveur répond avec des headers de contrôle d’accès compatibles.

=> OPTIONS https://api.com/foobar - HEADERS - Origin: http://application.com Access-Control-Request-Method: POST Access-Control-Request-Headers: Api-Key <= HTTP/1.1 204 No Content - RESPONSE HEADERS - Access-Control-Allow-Origin: http://application.com Access-Control-Allow-Methods: GET, POST, OPTIONS Access-Control-Max-Age: 86400 Access-Control-Allow-Headers: Api-Key

Pour plus d’informations sur le fonctionnement de CORS, je vous laisse lire les articles Making Cross-Domain Requests with CORS et Démystifier CORS (Cross-Origin Resource Sharing) qui sont très complets

Mickael Ruau's insight:

Reverse Proxy

Malheureusement l’API que je souhaitais utiliser n’était pas compatible CORS. Si c’est votre cas également, il faudra alors passer par un proxy.

Nginx permet simplement de mettre en place ce genre de reverse proxy grace à une configuration de ce type :

server { listen 80; server_name application.com; location /api { # Rewrite /api/resource/action?key=value to /resource/action?key=value RewriteRule ^/api/(.*)$ /$i [L,PT,QSA] # Activer le proxy proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://api.com; proxy_redirect off; proxy_buffers 32 16k; proxy_busy_buffers_size 64k; } }

Ainsi, votre application pourra appeler votre API sur http://application.com/api sans problème de cross-origin.

Si vous avez besoin d’exposer l’API sur un autre domaine ou sur un autre port que votre application, vous aurez besoin de permettre le cross-domain grâce à CORS. Mon application tournant sur localhost:8080, j’ai décidé de mettre mon proxy sur localhost:8181.

server { listen 8181; server_name localhost; location / { # Activer le proxy proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://api.com; proxy_redirect off; proxy_buffers 32 16k; proxy_busy_buffers_size 64k; # Ajouter les headers de contrôle d'accès CORS add_header 'Access-Control-Allow-Origin' '*' always; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always; add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept' always; add_header 'Access-Control-Allow-Credentials' 'true' always; }

Je peux ainsi appeler l’API sur localhost:8181 de façon transparente.

Attention, Access-Control-Allow-Origin: '*' autorise les requêtes cross-origin depuis n'importe quel domaine, en dev cela permet de facilement mettre CORS en place mais dans un soucis de sécurité il faudrait être plus restrictif.
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Using CORS for Cross-Domain Ajax Requests | Constant Contact Tech Blog

When building complex client-side applications, at some point it usually becomes necessary to make Ajax requests to domains other than the one from which y
Mickael Ruau's insight:

Alternatives to CORS

If your web application must run in browsers that do not support CORS or interact with servers that are not CORS-enabled, there are several alternatives to CORS that have been utilized to solve the cross-origin communication restriction.

  • JSONP. This is a technique that exploits the HTML script element exception to the same-origin security policy.  Script tags can load JavaScript from a different domain and query parameters can be added to the script URI to pass information to the server hosting the script about the resources that you wish to access. The JSONP server will return JavaScript that is evaluated in the browser that calls an agreed upon JavaScript function already on the page to pass server resource data into your page.
  • OpenAjax Hub. This is an JavaScript Ajax library that allows integration of multiple client-side components within a single web application. Trusted and untrusted components to co-exist within the same page and communicate with each other as long as they all include the OpenAjax Hub JavaScript library. The framework provides a security manager to allow the application to set security policies on component messaging. Iframes are used to isolate components into secure sandboxes.
  • easyXDM. This is a JavaScript library that allows for string-based cross domain communication via iframes.  It works on the same principals as OpenAjax Hub but does not have the security manager component.
  • Proxied Iframe. This do-it-yourself technique involves including an iframe on your page from the domain you wish to communicate with.  This assumes that you are able to host pages on this other domain.  The JavaScript running in the iframe serves as a rest proxy to the server containing the resources you wish to access.  Communication between your application and the rest proxy will take place using post message.  Post message is part of the HTML5 standard, but there is also a jQuery implementation for non HTML5-compliant browsers.
No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Mise en place d'un service REST php-mySQL pour angularJS, résolution des problèmes de CORS. - ekito people

Dans cet article, je détaille comment configurer la communication entre deux serveurs de développement locaux. Le premier héberge un site en angularJS qui souhaite communiquer avec le second, un serveur REST basé sur php et mySQL.

Ce genre de communication intra-serveur doit être configuré en suivant les spécifications

du W3C

No comment yet.
Scooped by Mickael Ruau
Scoop.it!

Creating a RESTful API with PHP

Let's Talk About CORS

One of the core premises of an API is that clients on different domains than the one the API is hosted on will be connecting to the API to send and receive data. There is an inherit security risk here, as this can allow an attacker to create an imitation page and steal data sent back and forth. Therefore this ability must be explicitly enabled on pages that wish to allow what is called Cross-Origin Resource Sharing, aka CORS. One excellent resource to learn more about CORS is the website Enable CORS - it was quite helpful to me as I was trying to understand things.

 

For our API we need to make sure that this is enabled, so the very first thing that is done in the __construct method is to set some custom headers. The first two are the magic; firstly we allow requests from any origin to be processed by this page, next we allow for any HTTP method to be accepted.

 

Once the surprisingly simple yet completely crucial step of allowing CORS requests has been completed, it becomes time for our script to understand what the client has asked of it. To do that we're going to take the $request variable which will be sent to our script from the .htaccess file (remember? it contains the original URI that the client requested), and tear it apart into the components we need. Once it's been exploded around the slash by pulling off the very first element we can grab the endpoint, if applicable the next slot in the array is the verb, and any remaining items are used as $args.

 

The HTTP method will describe the purpose of this request. GET requests are easy to detect, but DELETE and PUT requests are hidden inside a POST request through the use of the HTTP_X_HTTP_METHOD header. Once a method has been picked, the appropriate data source is parsed and cleaned for safety before being executed.

No comment yet.