-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Description
Description
Ce script PHP affiche des informations de chaîne YouTube en utilisant directement des valeurs provenant de $_GET et de réponses API sans aucune validation ni échappement.
Cela expose l’application à plusieurs vulnérabilités de sécurité critiques, notamment XSS (Cross-Site Scripting) et des injections indirectes.
❌ Problèmes identifiés
- ❗ Utilisation directe de $_GET sans validation
$_GET['channelid']
$_GET['pageToken']
Aucune vérification de type ou de format
Peut être manipulé via l’URL
Utilisé dans :
appels PHP
requêtes AJAX
attributs HTML
URLs
➡️ Risque élevé de XSS et de requêtes malveillantes
- ❗ XSS via sorties HTML non échappées
Exemples :
Si l’API retourne du contenu contenant du HTML ou du JavaScript :
Script injecté dans la page
Exécution côté navigateur
➡️ Même si la source semble fiable (API YouTube), elle ne doit jamais être considérée comme sûre
- ❗ Injection JavaScript dans .load()
Concaténation directe de paramètres utilisateur dans du JavaScript
Possibilité de casser la chaîne JS ou d’injecter du code
⚠️ Vérification incorrecte de $_GET
if(!is_array($_GET)&&count($_GET)<=0){
exit();
}
$_GET est toujours un tableau
Cette condition est inutile et incorrecte
Le script peut continuer avec des paramètres invalides
⚠️ Manque de valeurs par défaut sûres
$_GET['pageToken']
Peut générer des notices PHP si absent
Déjà géré partiellement mais réutilisé plus bas sans contrôle
📌 Comportement attendu
Toutes les entrées utilisateur doivent être :
validées
filtrées
Toutes les sorties HTML doivent être échappées
Le JavaScript doit être protégé contre les injections
Aucune dépendance à des données non fiables
📌 Comportement actuel
Failles XSS possibles
Risques de comportement inattendu
Code difficile à sécuriser et maintenir
🔧 Suggestions de correction
Valider les entrées :
$channelId = filter_input(INPUT_GET, 'channelid', FILTER_SANITIZE_SPECIAL_CHARS);
$pageToken = filter_input(INPUT_GET, 'pageToken', FILTER_SANITIZE_SPECIAL_CHARS) ?? '';
Échapper les sorties HTML :
echo htmlspecialchars($title, ENT_QUOTES, 'UTF-8');
Éviter l’injection JS :
json_encode($url);
Corriger la condition initiale :
if (empty($_GET['channelid'])) {
exit();
}
ℹ️ Contexte
Langage : PHP
Type : Sécurité
Gravité : Élevée
Impact : XSS, injection JavaScript, compromission utilisateur