Bonjour à tous

Je n'arrive pas à retrouver d'information sur les règles qui contrôlent l'accès inter domaines.

Par exemple on peut librement insérer dans une page une image sui se trouve sur un autre site, mais qu'en est-il de l'utilisation d'un fichier js ou css d'un autre site?
Peut on utiliser la balise <base href="..."> en pointant vers un autre domaine?
Salut,

tant que le serveur t'y autorise tu peux insérer n'importe quel fichier depuis un serveur distant.

Je n'ai jamais utilisé base mais je ne vois pas de raison pour que ça ne fonctionne pas.
Merci de ta réponse
Effectivement ça doit dépendre du serveur.
Je constate des différences entre les différents serveurs mutualisés que j’utilise. Mais comme je n’ai pas accès à la configuration du serveur, je pense que je dois simplement procéder par essais et erreurs.
Modérateur
Bonjour,

de base l'inclusion d'images, scripts et css ne sont pas restreintes, bien qu'un serveur puisse mettre des limites en jouant sur le referer par exemple.

Ce qui est limité et nécessite une permission CORS est, de manière non exhaustive:

- Les requêtes ajax
- manipuler le contenu d'une frame/iframe
- L'inclusion de polices web
- Les images dans un élément canvas

De plus, les pages peuvent, par une simple en-tête, interdire l'inclusion dans une frame/iframe.

Quant à une page HTML, elle peut par une en-tête ou une meta bloquer précisément chaque type de chargement de ressources
Merci de ta réponse
Je comprends le principe, mais je ne vois pas comment l'appliquer
Par exemple, si je veux faire une requête requête ajax depuis le site A vers une page php du site B, (que je gère tous les deux) que faut il faire pour que cette requête soit acceptée?
Modifié par PapyJP (26 Nov 2019 - 15:45)
Modérateur
La solution:

Le site B ajoute une entête dans sa réponse, en php:

header('Access-Control-Allow-Origin: *');
// OU
header('Access-Control-Allow-Origin:  https://www.monsiteA.com')
 

Modifié par kustolovic (26 Nov 2019 - 16:22)
Modérateur
NB: Cette sécurité existe car les requêtes ajax utilisent la session utilisateur. Une requête ajax pourrait ainsi silencieusement aller changer notre mot de passe alsacreations sans cela (ou juste lire les messages privés). Si le site B n'a rien de confidentiel et que tout est public quel que soit l'utilisateur, on peut très bien définir cette en-tête dans toutes les réponses dans le fichier htaccess par exemple.
Merci, voilà qui est clair
Je vais pouvoir l'utiliser entre un site et son site de tests, qui sont tous les deux sur le même serveur, et même plus, le site de tests est un sous-répertoire du site principal. Je peux donc lire le contenu d'un site sur l'autre, mais si passe par une requête ajax ça ne marchait pas.
Clarifions
upload/1574788294-48769-2sites.png
1) l'utilisateur appelle une page depuis le site bleu
2) le site bleu lui envoie la page, dont l'url appartient au site bleu
3) l'utilisateur effectue une action sui se traduit par l'envoi d'une requête AJAX vers le site vert
4) tel que je comprends les choses, le programme appelé envoie une réponse commençant par
header('Access-Control-Allow-Origin:   https://site-bleu.com')

C'est le navigateur de l'utilisateur qui décide d'accepter la réponse grâce à ce header
Est-ce bien ça?
Modifié par PapyJP (26 Nov 2019 - 18:15)
Modérateur
PapyJP a écrit :
C'est le navigateur de l'utilisateur qui décide d'accepter la réponse grâce à ce header
Est-ce bien ça?

Absolument oui.

Pour du dev, il m'arrive de m'affranchir de cela en désactivant la sécurité du navigateur. Et là toutes les requètes Ajax passent.
Meilleure solution
Si j'ai bien compris, on peut également mettre dans le .htaccess du site vert une directive

Header Set Access-Control-Allow-Origin "http://site-bleu.com"

???
Modérateur
Oui, cela ajoutera l'en-tête dans toutes les réponses:


<ifModule mod_headers.c>
  Header set Access-Control-Allow-Origin "http://site-bleu.com"
</IfModule>


on peut même mettre des restrictions du type:


<ifModule mod_headers.c>
  <FilesMatch "\.(php)$">
     Header set Access-Control-Allow-Origin "http://site-bleu.com"
  </FilesMatch>
  <FilesMatch "\.(eot|ttf|otf|woff)$">
      Header set Access-Control-Allow-Origin "*"
   </FilesMatch>
</IfModule>


Pour autant que le mod Header d'apache soit actif et qu'on ai le droit de définir des headers dans htaccess, mais c'est généralement le cas sur des installations standards ou des hébergeurs mutualisés.