English | 繁中版 | 简中版 | العربية | Azərbaycan | Български | বাংলা | Čeština | Deutsch | Ελληνικά | Español | فارسی | Français | हिंदी | Indonesia | Italiano | 日本語 | 한국어 | ພາສາລາວ | Македонски | മലയാളം | Монгол | Nederlands | Polski | Português (Brasil) | Русский | ไทย | Türkçe | Українська | Tiếng Việt
Llista de comprovació de les contramesures de seguretat més importants a l'hora de dissenyar, provar i llançar la vostra API.
- No utilitzeu
Basic Auth
. Utilitzeu l'autenticació estàndard en el seu lloc (per exemple, JWT). - No reinventeu la roda en
Autenticació
,generació de tokens
,emmagatzematge de contrasenyes
. Utilitzeu els estàndards. - Utilitzeu polítiques de límit de reintents (
Max Retry
) i funcionalitats de jailing al Login. - Utilitzeu el xifratge en totes les dades sensibles.
- Utilitzeu una clau complicada aleatòria (
JWT Secret
) per fer que forçar el token sigui molt difícil. - No extregueu l'algorisme de l'encapçalament. Forci l'algorisme al backend (
HS256
oRS256
). - Feu l'expiració del token (
TTL
,RTTL
) el més curt possible. - No emmagatzemeu dades sensibles en la càrrega útil del JWT, es pot descodificar fàcilment.
- Eviteu emmagatzemar massa dades. El JWT normalment es comparteix en encapçalaments i tenen un límit de mida.
- Limiteu les sol·licituds (
Throttling
) per evitar atacs de DDoS / força bruta. - Utilitzeu HTTPS al servidor amb TLS 1.2+ i xifrats segurs per evitar atacs MITM (Man In The Middle Attack).
- Utilitzeu l'encapçalament
HSTS
amb SSL per evitar atacs d'extracció SSL. - Desactiveu les llistes de directoris.
- Per a les API privades, permeteu l'accés només des de IPs/hosts autoritzats.
- Valideu sempre
redirect_uri
al servidor per permetre només URL autoritzades. - Intenteu canviar sempre per codi i no per tokens (no permeteu
response_type=token
). - Utilitzeu el paràmetre
state
amb un hash aleatori per evitar CSRF en el procés d'autorització d'OAuth. - Definiu l'scope per defecte i valideu els paràmetres d'scope per a cada aplicació.
- Utilitza el mètode HTTP adequat segons l'operació:
GET (llegir)
,POST (crear)
,PUT/PATCH (reemplaçar/actualitzar)
, iDELETE (eliminar)
, i respon amb405 Method Not Allowed
si el mètode sol·licitat no és adequat per al recurs sol·licitat. - Valida el
content-type
a l'encapçalament Accept de la sol·licitud (Content Negotiation) per permetre només el teu format compatible (per exemple,application/xml
,application/json
, etc.) i respon amb una resposta406 Not Acceptable
si no coincideix. - Valida el
content-type
de les dades enviades com accepteu (per exemple,application/x-www-form-urlencoded
,multipart/form-data
,application/json
, etc.). - Valida l'entrada de l'usuari per evitar vulnerabilitats comunes (per exemple,
XSS
,Injecció SQL
,Execució de codi remot
, etc.). - No utilitzis cap dada sensible (
credentials
,passwords
,security tokens
, orAPI keys
) a l'URL, sinó que utilitza l'encapçalament d'autorització estàndard. - Utilitza només el xifratge al servidor.
- Utilitza un servei d'API Gateway per habilitar polítiques de memòria cau, polítiques de límit de taxa (per exemple,
Quota
,Spike Arrest
oConcurrent Rate Limit
) i desplegar recursos d'API dinàmicament.
- Comprova si tots els endpoints estan protegits darrere de l'autenticació per evitar el procés d'autenticació trencat.
- S'hauria d'evitar l'ID de recurs propi de l'usuari. Utilitza
/me/orders
en lloc de/user/654321/orders
. - No utilitzis IDs autoicrementals. Utilitza
UUID
en lloc d'això. - Si estàs analitzant dades XML, assegura't que l'anàlisi d'entitats no estigui habilitat per evitar
XXE
(XML external entity attack). - Si estàs analitzant XML, YAML o qualsevol altre llenguatge amb àncores i referències, assegura't que l'expansió d'entitats no estigui habilitada per evitar
Billion Laughs/XML bomb
a través d'un atac d'expansió d'entitats exponencial. - Utilitza un CDN per carregar fitxers.
- Si estàs tractant amb una gran quantitat de dades, utilitza Workers i Queues per processar el màxim possible en segon pla i retornar una resposta ràpida per evitar el bloqueig HTTP.
- No oblidis desactivar el mode DEBUG.
- Utilitza stacks no executables quan estiguin disponibles.
- Envia l'encapçalament
X-Content-Type-Options: nosniff
. - Envia l'encapçalament
X-Frame-Options: deny
. - Envia l'encapçalament
Content-Security-Policy: default-src 'none'
. - Elimina els encapçalaments d'identificació -
X-Powered-By
,Server
,X-AspNet-Version
, etc. - Força
content-type
per a la teva resposta. Si tornesapplication/json
, llavors la teva resposta decontent-type
ésapplication/json
. - No retornis dades sensibles com
credencials
,contrasenyes
otokens de seguretat
. - Retorna el codi d'estat adequat segons l'operació completada. (per exemple,
200 OK
,400 Bad Request
,401 Unauthorized
,405 Method Not Allowed
, etc.).
- Auditora el teu disseny i implementació amb cobertura de tests unitàris i d'integració.
- Utilitza un procés de revisió de codi i ignora l'autoaprovació.
- Assegura't que tots els components dels teus serveis siguin escanejats estàticament per un programari AV abans de desplegar-los a producció, incloent biblioteques de tercers i altres dependències.
- Executa contínuament tests de seguretat (anàlisi estàtica/dinàmica) en el teu codi.
- Comprova les teves dependències (tant el programari com el sistema operatiu) per a vulnerabilitats conegudes.
- Dissenyar una solució de reversió per a desplegaments.
- Utilitza inicis de sessió centralitzats per a tots els serveis i components.
- Utilitza agents per monitorar tot el tràfic, errors, sol·licituds i respostes.
- Utilitza alertes per SMS, Slack, correu electrònic, Telegram, Kibana, Cloudwatch, etc.
- Assegura't de no registrar cap dada sensible com ara targetes de crèdit, contrasenyes, PINs, etc.
- Utilitza un sistema IDS i/o IPS per monitorar les teves sol·licituds d'API i instàncies.
- yosriady/api-development-tools - Una col·lecció de recursos útils per a la construcció de RESTful HTTP+JSON APIs.
No dubteu a contribuir fent un fork d'aquest repositori, fent alguns canvis i enviant pull requests. Per a qualsevol pregunta envia'ns un correu electrònic a [email protected]
.