Insecure Cross-Origin Resource Sharing (CORS) policy
Política de intercambio de recursos de origen cruzado (CORS) insegura
Descripción
El intercambio de recursos de origen cruzado (CORS) utiliza encabezados HTTP para permitir que un cliente web acceda a los recursos de un servidor en un dominio diferente. Los navegadores restringen las solicitudes HTTP de origen cruzado iniciadas desde scripts por motivos de seguridad.
Si la política permite otro dominio, entonces ese dominio puede atacar a los usuarios de la aplicación. Si un usuario ha iniciado sesión en la aplicación y visita un dominio permitido por la política, cualquier contenido malicioso que se ejecute en ese dominio puede recuperar contenido de la aplicación y llevar a cabo acciones dentro del contexto de seguridad del usuario que ha iniciado sesión.
Recomendación
Para mitigar los riesgos de seguridad asociados con el intercambio de recursos de origen cruzado (CORS), puede implementar controles del lado del servidor para restringir el acceso a los recursos en función del origen del cliente que realiza la solicitud.
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__)
# Definir una lista de orígenes permitidos
allowed_origins = [
'http://example.com',
'https://example.com',
# Agregar más orígenes según sea necesario
]
# Inicializar CORS con la lista blanca
CORS(app, origins=allowed_origins)
# Definir rutas
@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
}
?>
Enlaces
Estándares
- 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