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