Maison >interface Web >js tutoriel >Comment puis-je configurer correctement les en-têtes CORS en PHP pour éviter les erreurs de requêtes multi-origines ?

Comment puis-je configurer correctement les en-têtes CORS en PHP pour éviter les erreurs de requêtes multi-origines ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-16 06:15:16251parcourir

How Can I Properly Configure CORS Headers in PHP to Avoid Cross-Origin Request Errors?

En-têtes de requête Cross-Origin (CORS) avec en-têtes PHP

Comprendre CORS

Le partage de requêtes Cross-Origin (CORS) est un mécanisme qui permet navigateurs pour effectuer en toute sécurité des requêtes HTTP d'origine croisée, permettant la communication entre différents domaines ou sous-domaines. Ce mécanisme permet d'empêcher tout accès non autorisé aux ressources, garantissant ainsi la confidentialité et la sécurité des données.

Flux CORS avec exemples d'en-têtes

Pour illustrer le flux CORS, considérons un script PHP simplifié :

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: *");

Ce script permet les requêtes cross-origin depuis n'importe quelle origine et n'importe quel en-tête. Cependant, dans certains cas, vous pouvez rencontrer un message d'erreur du type :

Request header field X-Requested-With is not allowed by Access-Control-Allow-Headers

Résoudre l'erreur

Pour gérer correctement les requêtes CORS, vous devez spécifier explicitement les en-têtes autorisés. Une fonction plus complète qui répond correctement aux requêtes CORS est :

function cors() {
    if (isset($_SERVER['HTTP_ORIGIN'])) {
        header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
        header('Access-Control-Allow-Credentials: true');
        header('Access-Control-Max-Age: 86400');
    }

    if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
        if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) {
            header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
        }
        if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) {
            header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
        }
        exit(0);
    }

    echo "You have CORS!";
}

Notes de sécurité

1. Validez le HTTP_ORIGIN :
Lorsque vous recevez un en-tête HTTP_ORIGIN, vérifiez-le toujours par rapport à une liste blanche d'origines approuvées avant d'autoriser la demande.

2. Validation X-Requested-With :
Le script ci-dessus autorise n'importe quel en-tête, y compris X-Requested-With. Cela doit également être validé, en particulier dans un environnement de production.

3. Lisez les spécifications CORS :
Pour une compréhension complète de CORS, reportez-vous aux spécifications officielles :

  • [Contrôle d'accès HTTP](https://developer.mozilla.org/en /HTTP_access_control)
  • [Récupérer Standard](https://fetch.spec.whatwg.org/#http-cors-protocol)

TL;DR

  • CORS permet les requêtes HTTP d'origine croisée en modifiant la politique de sécurité du navigateur.
  • Lorsque vous répondez aux requêtes CORS, vous devez définir le paramètre Access-Control-Allow-Origin header.
  • Spécifiez explicitement les en-têtes autorisés à l'aide d'Access-Control-Allow-Headers.
  • Validez toujours HTTP_ORIGIN et les autres en-têtes pertinents pour des raisons de sécurité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn