Dans le développement Web, la prévention des XS (attaques de scripts croisées) est une tâche importante pour assurer la sécurité des données utilisateur. PHP fournit la fonction HTMLSpecialCars () pour convertir des caractères spéciaux en entités HTML, empêchant ainsi efficacement l'injection de script malveillante. La fonction sprintf () est souvent utilisée pour formater les chaînes, en particulier lors de la construction de HTML dynamiquement.
Dans cet article, nous expliquerons comment utiliser sprintf () et htmlSpecialChars () pour construire une sortie HTML sécurisée et bien structurée.
Une attaque XSS fait référence à un attaquant injectant des scripts malveillants dans une page Web. Une fois que l'utilisateur parcourt la page Web, ces scripts seront exécutés dans le navigateur de l'utilisateur, qui peut voler des cookies, altérer le contenu de la page ou effectuer des opérations non autorisées.
HTMLSpecialCars () est une fonction intégrée dans PHP qui échappe aux caractères spéciaux dans HTML (tels que < , > , & , " etc.) en entités HTML. De cette façon, même si l'entrée de l'utilisateur contient des balises de script, elle ne sera pas analysée en code réel.
$user_input = '<script>alert("XSS")</script>';
$safe_output = htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
echo $safe_output;
// Sortir:<script>alert("XSS")</script>
sprintf () est utilisé pour insérer des variables en chaînes formatées, et il n'effectue automatiquement aucun traitement d'évasion. Par conséquent, lors de la sortie des données saisies par l'utilisateur, il doit être traité à l'aide de htmlSpecialCars () , puis transmis sur sprintf () .
$template = '<a href="%s">%s</a>';
$url = 'https://gitbox.net/page?search=<script>alert(1)</script>';
$link_text = 'Cliquez pour voir';
$safe_url = htmlspecialchars($url, ENT_QUOTES, 'UTF-8');
echo sprintf($template, $safe_url, $link_text);
// Sortir:<a href="https://gitbox.net/page?search=<script>alert(1)</script>">Cliquez pour voir</a>
Remarque: Bien que Link_text soit statique dans l'exemple ci-dessus, s'il est entré par l'utilisateur, il doit également être géré avec htmlSpecialChars () !
Supposons que vous développiez un babillard et que le contenu de surnom et de message soumis à l'utilisateur sera affiché sur la page. Voici un exemple d'insécurité:
echo sprintf('<p>%s expliquer:%s</p>', $_POST['name'], $_POST['message']);
Un attaquant peut soumettre ce qui suit:
Surnom: <cript> alert ("xss") </cript>
Laissez un message: <img src = "x" onerror = "alert ('xss')">
$name = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
$message = htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8');
echo sprintf('<p>%s expliquer:%s</p>', $name, $message);
De cette façon, peu importe ce que l'utilisateur entre, il ne sera pas analysé en HTML ou JavaScript réel par le navigateur, empêchant ainsi efficacement les attaques XSS.
L'utilisation de htmlSpecialChars () pour échapper à l'entrée de l'utilisateur est le principal moyen d'empêcher les XS.
Lorsque vous construisez une sortie HTML, vous pouvez combiner sprintf () pour effectuer un épissage de structure claire, mais vous devez vous échapper d'abord, puis le formater .
Distinguer strictement les données de la structure et ne jamais faire confiance à l'entrée des utilisateurs.
En combinant raisonnablement sprintf () et htmlSpecialChars () , nous pouvons résister efficacement aux risques d'attaque frontale courants tout en garantissant que le code est clair et lisible. J'espère que cet article sera utile à votre travail de développement!