Introducció
En aquest tema, explorarem el concepte de CORS (Cross-Origin Resource Sharing) i les polítiques de seguretat associades. CORS és un mecanisme que permet que els recursos restringits d'una pàgina web es sol·licitin des d'un altre domini fora del domini des del qual es va servir el recurs original. Això és crucial per a la seguretat de les APIs RESTful, ja que ajuda a controlar qui pot accedir als recursos de la teva API.
Què és CORS?
CORS és un estàndard de seguretat que permet que les pàgines web sol·licitin recursos d'un domini diferent del domini des del qual es va carregar la pàgina. Això és necessari perquè, per defecte, les sol·licituds AJAX (Asynchronous JavaScript and XML) estan restringides al mateix origen per raons de seguretat.
Com funciona CORS?
- Sol·licitud Preflight: Abans de fer una sol·licitud real, el navegador envia una sol·licitud preflight (OPTIONS) per verificar si el servidor permet la sol·licitud de l'origen especificat.
- Capçaleres CORS: El servidor respon amb capçaleres que indiquen si l'origen és permès i quins mètodes HTTP i capçaleres estan autoritzats.
- Sol·licitud Real: Si la sol·licitud preflight és acceptada, el navegador envia la sol·licitud real.
Capçaleres CORS
- Access-Control-Allow-Origin: Especifica els orígens que tenen permís per accedir al recurs.
- Access-Control-Allow-Methods: Indica els mètodes HTTP que es poden utilitzar quan s'accedeix al recurs.
- Access-Control-Allow-Headers: Llista les capçaleres que es poden utilitzar en la sol·licitud.
- Access-Control-Allow-Credentials: Indica si les credencials (cookies, capçaleres d'autorització) es poden incloure en la sol·licitud.
Exemple de configuració CORS
// Exemple en Node.js amb Express const express = require('express'); const cors = require('cors'); const app = express(); const corsOptions = { origin: 'http://example.com', methods: 'GET,HEAD,PUT,PATCH,POST,DELETE', allowedHeaders: ['Content-Type', 'Authorization'], credentials: true, }; app.use(cors(corsOptions)); app.get('/api/resource', (req, res) => { res.json({ message: 'Aquest és un recurs protegit per CORS' }); }); app.listen(3000, () => { console.log('Servidor escoltant al port 3000'); });
Polítiques de Seguretat
A més de CORS, hi ha altres polítiques de seguretat que hauríem de considerar per protegir les nostres APIs RESTful.
Autenticació i Autorització
- Autenticació: Verifica la identitat de l'usuari que fa la sol·licitud.
- Autorització: Determina si l'usuari autenticat té permís per accedir al recurs sol·licitat.
HTTPS
Utilitzar HTTPS per encriptar les dades en trànsit és essencial per protegir la informació sensible.
Rate Limiting i Throttling
Implementar mecanismes de rate limiting i throttling per prevenir abusos i atacs de denegació de servei (DoS).
Validació d'Entrada
Validar totes les dades d'entrada per prevenir atacs com la injecció SQL i altres vulnerabilitats.
Capçaleres de Seguretat
- Content-Security-Policy (CSP): Defineix quines fonts de contingut són considerades segures.
- X-Content-Type-Options: Evita que els navegadors interpretin incorrectament els tipus de contingut.
- X-Frame-Options: Prevé que la pàgina sigui carregada en un iframe, protegint contra atacs de clickjacking.
Exercici Pràctic
Exercici
Configura una API RESTful amb Express que implementi CORS i altres capçaleres de seguretat. La teva API ha de tenir un endpoint /api/data
que només permeti sol·licituds des de http://example.com
.
Solució
const express = require('express'); const cors = require('cors'); const helmet = require('helmet'); const app = express(); const corsOptions = { origin: 'http://example.com', methods: 'GET,POST', allowedHeaders: ['Content-Type', 'Authorization'], credentials: true, }; app.use(cors(corsOptions)); app.use(helmet()); app.get('/api/data', (req, res) => { res.json({ message: 'Dades protegides per CORS i capçaleres de seguretat' }); }); app.listen(3000, () => { console.log('Servidor escoltant al port 3000'); });
Conclusió
En aquesta secció, hem après sobre el concepte de CORS i com configurar-lo per protegir les nostres APIs RESTful. També hem explorat altres polítiques de seguretat que són essencials per assegurar que les nostres APIs siguin segures i resistents a atacs. Amb aquesta base, estem preparats per implementar pràctiques de seguretat robustes en les nostres aplicacions.
Curs de REST API: Principis de Disseny i Desenvolupament d'APIs RESTful
Mòdul 1: Introducció a les APIs RESTful
Mòdul 2: Disseny d'APIs RESTful
- Principis de disseny d'APIs RESTful
- Recursos i URIs
- Mètodes HTTP
- Codis d'estat HTTP
- Versionat d'APIs
- Documentació d'APIs
Mòdul 3: Desenvolupament d'APIs RESTful
- Configuració de l'entorn de desenvolupament
- Creació d'un servidor bàsic
- Gestió de peticions i respostes
- Autenticació i autorització
- Gestió d'errors
- Proves i validació
Mòdul 4: Bones Pràctiques i Seguretat
- Bones pràctiques en el disseny d'APIs
- Seguretat en APIs RESTful
- Rate limiting i throttling
- CORS i polítiques de seguretat
Mòdul 5: Eines i Frameworks
- Postman per a proves d'APIs
- Swagger per a documentació
- Frameworks populars per a APIs RESTful
- Integració contínua i desplegament