Authentification API faible dans Symfony: comment le réparer

DEV - 10/08
Si votre API Symfony est orientée vers le public, la faible authentification est votre risque n ° 1. Dans ce guide, je vais montrer ...

Si votre API Symfony est orientée vers le public, la faible authentification est votre risque n ° 1. Dans ce guide, je vais montrer des correctifs pratiques et copies-coller pour JWT, les clés d'API, la limitation des taux et les défauts de défaut sécurisés - plus comment vérifier rapidement votre site avec un scanner de vulnérabilité de site Web en ligne.

Pourquoi la «faible authentification» se produit dans Symfony

Pièges communs que je vois dans les audits:

  • Autorisation accidentellePublic_accesssur/ api / *
  • Jetons à longue durée de vie (pas de rotation, pas de rafraîchissement)
  • IP / Prise de commande manquante
  • Traiter les clés d'API comme les mots de passe (pas de portée / expiration / rotation)
  • Les secrets qui fuient via des messages d'erreur verbeux ou des barres d'outils de débogage

Gagnez rapide: exécutez votre site via notre scanner de sécurité de site Web gratuit pour basculer votre posture et trouver des fruits à faible maintien. Pour des plongées plus profondes, je publie également sur notre blog: Pentest Testing Corp →.

Le «mauvais» (quoi éviter)

# config / packages / Security.yaml # ❌ Exemple d'API faible Auth: Tout sous / API est effectivement la sécurité publique: activer_authenticator_manager: vrai parent: Dev: Pattern: ^ / (?: _ Profiler | _wdt | Bundles | CSS | Images | js) / Security: FALSE API: Modèle: ^ / api Statless: True # manquante # Missing Any Authroger Access_Control: - {Path: ^ / API, Rôles: public_access} # ← Cela rend votre API non authentifiée
Entrez le mode de sortie en mode plein écran

Le «bon» (défaut sécurisés avec JWT)

1) Installer et générer des clés

Le compositeur a besoin de Lexik / JWT-Authentication-Bundle PHP Bin / Console Lexik: JWT: Generate-Keypair
Entrez le mode de sortie en mode plein écran

2) Configurer JWT

# config / packages / lexik_jwt_authentication.yaml lexik_jwt_authentication: secret_key: '% kernel.project_dir% / config / jwt / private.pem' public_key: '% kernel.project_dir% / config / jwt / public.pem' pass_phrase: '% env (jwt_passphras) token_ttl: 3600 # 1 heure d'accès jetons token_extractors: Authorization_header: activé: vrai préfixe: nom du porteur: autorisation
Entrez le mode de sortie en mode plein écran

3) durcirSécurité.yaml

# config / packages / Security.yaml Security: activy_authenticator_manager: true password_hashers: symfony \ composant \ security \ core \ user \ ...
[Courte citation de 8% de l'article original]
Loading...