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