Le stockage XSS (attaque de script de site transversale) est une vulnérabilité de sécurité courante qui permet à un attaquant de stocker un script malveillant dans une base de données en soumettant des scripts malveillants, qui peuvent être exécutés lorsque d'autres utilisateurs accédaient aux données. Le principal problème de ce type d'attaque est que les scripts malveillants sont stockés du côté du serveur et exécutés dans des demandes ultérieures, qui sont généralement utilisées pour voler des informations de session utilisateur ou effectuer d'autres opérations malveillantes.
Pour éviter cette attaque, nous devons nous assurer que le codage des caractères dans la base de données est traité correctement et que le code malveillant est empêché d'être exécuté. MySQLI :: Get_Charset est une fonction PHP qui nous aide à confirmer les paramètres de codage des caractères des connexions de base de données. S'assurer que les paramètres de codage sont corrects est une étape pour empêcher les attaques XSS.
La fonction MySQLI :: Get_Charset fait partie de la bibliothèque d'extension MySQLI et est utilisée pour obtenir le jeu de caractères (codage de caractères) de la connexion de la base de données actuelle. Les vulnérabilités potentielles de XSS dues à un décrochage de codage peuvent être évitées en obtenant et en veillant à ce que le jeu de caractères soit réglé correctement.
$charset = $mysqli->get_charset();
La valeur de retour est un objet qui contient des informations sur le jeu de caractères utilisés par la connexion actuelle.
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
// Vérifiez si la connexion réussit
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
// Obtenez le jeu de caractères de la connexion de la base de données actuelle
$charset = $mysqli->get_charset();
// Sortie des paramètres de jeu de caractères actuels
echo "Le jeu de caractères actuel est: " . $charset->charset;
?>
Les paramètres d'encodage de caractères déterminent comment les données sont transférées de l'application vers la base de données et comment les données sont renvoyées de la base de données vers l'application. Si le codage des caractères est incorrect, il peut entraîner des attaques brouillées ou d'injection de code, surtout lors du traitement de l'entrée des utilisateurs. Surtout pour les attaques XSS stockées, le code malveillant est susceptible d'être exécuté de manière incorrecte en raison d'un codage incohérent.
Avec les paramètres d'encodage corrects, il est veillé à ce que tout, de l'entrée de l'utilisateur au stockage de la base de données et de la sortie du côté utilisateur ne soit falsifié ou interprété comme des scripts exécutables.
Les étapes les plus importantes pour empêcher les attaques XSS de stockage comprennent:
Assurez-vous que la connexion de la base de données utilise le jeu de caractères correct:
Il est important d'utiliser le jeu de caractères correct lors de la connexion à une base de données. Si le jeu de caractères ne correspond pas, l'entrée de l'utilisateur malveillant peut être gérée par des erreurs, provoquant une vulnérabilité XSS. Les paramètres de jeu de caractères actuels peuvent être confirmés via mysqli :: get_charset .
Effectuer un filtrage et une évasion appropriés de l'entrée utilisateur:
Quel que soit le type d'entrée de l'utilisateur de contenu, le filtrage et l'évasion appropriés doivent être effectués. Surtout pour le code HTML et JavaScript, assurez-vous qu'ils ne sont pas exécutés. Utilisez les fonctions htmlSpecialCars () ou mysqli_real_escape_string () fournies par PHP pour échapper à l'entrée.
Configuration de l'en-tête HTTP:
Assurez-vous que le contenu renvoyé par le serveur utilise le type MIME correct, tel que le texte / HTML . De plus, le type de contenu doit également être défini sur UTF-8 pour s'assurer que le navigateur analyse correctement le codage du caractère.
Utilisez une requête paramétrée:
La prévention de l'injection SQL est une autre mesure importante pour prévenir les attaques XSS. Le code SQL malveillant peut être empêché d'être exécuté en utilisant des instructions préparées.
Vérifiez et nettoyez les données:
Il est préférable de vérifier et de nettoyer avant de stocker la saisie de l'utilisateur dans la base de données. Vérifiez que la saisie des utilisateurs est légale et nettoie tout code malveillant potentiel.
Voici un exemple complet montrant comment s'assurer que le codage est configuré correctement et empêcher les attaques XSS:
<?php
// Connectez-vous à la base de données
$mysqli = new mysqli("localhost", "username", "password", "database");
// Vérifiez si la connexion réussit
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
// Obtenez les paramètres actuels du jeu de caractères
$charset = $mysqli->get_charset();
echo "Le jeu de caractères actuel est: " . $charset->charset . "<br>";
// Définissez le jeu de caractères correct sur utf8mb4
if (!$mysqli->set_charset("utf8mb4")) {
die("Impossible de définir le jeu de caractères: " . $mysqli->error);
}
// Obtenir et traiter la saisie des utilisateurs
$user_input = $_POST['user_input']; // Supposons que la saisie de l'utilisateur passe POST transfert
// utiliser htmlspecialchars() prévenir XSS
$safe_input = htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
// Stocker des entrées sécurisées à la base de données
$stmt = $mysqli->prepare("INSERT INTO users (user_input) VALUES (?)");
$stmt->bind_param("s", $safe_input);
$stmt->execute();
// Fermer la connexion
$stmt->close();
$mysqli->close();
?>
Dans cet exemple, nous confirmons d'abord les paramètres de set de caractères actuels via get_charset () , puis nous assurons que le codage UTF-8 est utilisé pour stocker et afficher les données via set_charset ("UTF8MB4") . En attendant, lors du traitement de l'entrée de l'utilisateur, nous utilisons HTMLSpecialCars () pour éviter toute attaque XSS potentielle.
En utilisant la fonction mysqli :: get_charset pour confirmer les paramètres du jeu de caractères de la connexion de la base de données et garantir que le codage correct est utilisé, nous pouvons effectivement empêcher les attaques XSS de stockage. Dans le même temps, la combinaison de mesures appropriées de vérification des entrées, d'échappement et de stockage peut maximiser la sécurité des applications Web et éviter les risques d'attaque potentiels.