Insecure Cross-Origin Resource Sharing (CORS) policy
Politique de partage des ressources cross-origin (CORS) non sécurisée
Description
Le partage des ressources cross-origin (CORS) utilise des en-têtes HTTP pour permettre à un client Web d'accéder aux ressources d'un serveur situé sur un domaine différent. Pour des raisons de sécurité, les navigateurs restreignent les requêtes HTTP cross-origin initiées depuis des scripts.
Si la politique autorise un autre domaine, ce domaine peut attaquer les utilisateurs de l'application. Si un utilisateur est connecté à l'application et visite un domaine autorisé par la politique, tout contenu malveillant s'exécutant sur ce domaine peut récupérer du contenu de l'application et effectuer des actions dans le contexte de sécurité de l'utilisateur connecté.
Recommandation
Pour atténuer les risques de sécurité associés au partage de ressources cross-origin (CORS), vous pouvez implémenter des contrôles côté serveur afin de restreindre l'accès aux ressources en fonction de l'origine du client demandeur.
const express = require('express');
const cors = require('cors');
const app = express();
// Define a whitelist of allowed origins
const whitelist = ['http://example1.com', 'http://example2.com'];
// Configure CORS options
const corsOptions = {
origin: function (origin, callback) {
if (whitelist.indexOf(origin) !== -1 || !origin) {
callback(null, true); // Allow request
} else {
callback(new Error('Not allowed by CORS')); // Deny request
}
}
};
// Apply CORS middleware with configured options
app.use(cors(corsOptions));
// Define routes
app.get('/', (req, res) => {
res.send('Hello World!');
});
// Start the server
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
from flask import Flask, jsonify, request
from flask_cors import CORS
app = Flask(__name__)
# Définir une liste d'origines autorisées
allowed_origins = [
'http://example.com',
'https://example.com',
# Ajouter plus d'origines au besoin
]
# Initialiser CORS avec la liste blanche
CORS(app, origins=allowed_origins)
# Définir les routes
@app.route('/')
def hello_world():
return jsonify(message='Hello World!')
if __name__ == '__main__':
app.run(debug=True)
<?php
// Enable CORS
header('Access-Control-Allow-Origin: http://example.com');
header('Access-Control-Allow-Methods: GET, POST');
header('Access-Control-Allow-Headers: Content-Type');
// Handle CORS pre-flight OPTIONS request
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
header('Access-Control-Allow-Methods: GET, POST');
header('Access-Control-Allow-Headers: Content-Type');
exit;
}
// Define your API logic
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
echo json_encode(array('message' => 'Hello World!'));
} else {
http_response_code(405); // Method Not Allowed
}
?>
Liens
Normes
- PCI_STANDARDS:
- REQ_2_2
- REQ_6_2
- REQ_6_3
- REQ_7_3
- REQ_8_3
- REQ_11_3
- HIPAA_CONTROLS:
- SECURITY221
- SECURITY212
- SECURITY213