Explorer
KNOW-ANT-002

Clés d'accès hardcodées - Ne jamais hardcoder des secrets

Domaine
cybersecu
Type
anti-pattern
Priorité
P2

Parent : [[INDEX-CYBERSECU]]

Anti-Pattern : Clés d'accès hardcodées

Erreur à éviter

Hardcoder des clés d'accès, API keys, ou secrets dans le code source.

Exemple incorrect

<?php
// ❌ DANGER - Clé hardcodée
class Web3stats extends MY_Controller {
  private const ACCESS_KEY = 'd3ShGIbbX3';  // Exposée dans git !
  
  public function index() {
    $key = $this->input->get('key');
    if (!$this->validateAccess($key)) {  // Auth faible
      show_404();
    }
  }
}
// ❌ DANGER - API keys dans le code
const API_KEY = 'BHIhrRSG7M';
const USER_ID = '71802';

Pourquoi c'est dangereux

  • Exposé dans l'historique git (même si supprimé après)
  • Visible dans les bundles frontend
  • Pas de rotation possible sans déploiement
  • Facilement extrait par reverse engineering

Bonne pratique

<?php
// ✅ CORRECT - Variables d'environnement
class Web3stats extends MY_Controller {
  private string $accessKey;
  
  public function __construct() {
    parent::__construct();
    $this->accessKey = $_ENV['WEB3_ACCESS_KEY'];
    if (empty($this->accessKey)) {
      throw new Exception('Access key not configured');
    }
  }
}
// ✅ CORRECT - Variables d'environnement
const API_KEY = process.env.STRESSCAT_API_KEY;
if (!API_KEY) {
  throw new Error('API_KEY not configured');
}

Configuration sécurisée

# .env (jamais commité !)
WEB3_ACCESS_KEY=d3ShGIbbX3
STRESSCAT_API_KEY=BHIhrRSG7M

# .gitignore
.env
.env.local
.env.production

Détection

# Recherche de patterns suspects
grep -r "private const.*KEY\s*=" --include="*.php" .
grep -r "API_KEY\s*=\s*['\"]" --include="*.js" .
grep -r "password\s*=\s*['\"]" --include="*.py" .

Références

  • Pattern correspondant : KNOW-PAT-050
  • Source : Archive Ygg forensics
  • CWE-798 : Use of Hard-coded Credentials