Attaque cross-origin

Une attaque cross-origin est une attaque qui vise à accéder à des ressources ou des données sur un autre site web que celui sur lequel l’utilisateur se trouve.

L’objectif principal d’une attaques cross-origin est de contourner les politiques de sécurité du navigateur pour accéder à des données sensibles ou exécuter des actions non autorisées sur d’autres sites web.

Elle exploite des vulnérabilités telles que les vulnérabilités CORS (Cross-Origin Resource Sharing) mal configurées ou l’absence de vérifications côté serveur pour les requêtes provenant d’autres origines.

Ces attaques peuvent inclure des attaques de type Cross-Site Scripting (XSS), Cross-Site Request Forgery (CSRF), ou d’autres méthodes malveillante qui peuvent impliquer la manipulation de requêtes HTTP, la falsification de jetons d’authentification, etc.

Exemple en PHP

// Vérifier l'origine de la requête
$origin = $_SERVER['HTTP_ORIGIN'];

// Vérifier si l'origine est autorisée
$allowed_origins = ['https://example.com', 'https://www.example.com'];
if (!in_array($origin, $allowed_origins)) {
    // Bloquer la requête
    header('HTTP/1.1 403 Forbidden');
    exit;
}

// Autoriser la requête
// ...

Exemple en JavaScript

// Vérifier l'origine de la requête
const origin = req.headers.origin;

// Vérifier si l'origine est autorisée
const allowedOrigins = ['https://example.com', 'https://www.example.com'];
if (!allowedOrigins.includes(origin)) {
    // Bloquer la requête
    res.status(403).send('Origine non autorisée');
    return;
}

// Autoriser la requête
// ...

Exemple de protection dans un fichier .htaccess avec un serveur Apache

# Autoriser uniquement les requêtes provenant de domaines de confiance
Header set Access-Control-Allow-Origin "https://example.com,https://www.example.com"

# Limiter les requêtes aux méthodes HTTP autorisées
Header set Access-Control-Allow-Methods "GET,POST,PUT"

# Limiter les requêtes aux en-têtes autorisés
Header set Access-Control-Allow-Headers "Content-Type,Authorization"

# Limiter les requêtes aux en-têtes exposés
Header set Access-Control-Expose-Headers "Link,X-Total-Count"

# Limiter la durée de validité du cache des en-têtes CORS
Header set Access-Control-Max-Age 3600