Position actuelle: Accueil> Derniers articles> Utilisez des fonctions d'initiés pour créer des paramètres de sécurité (comme la prévention des XSS et du CSRF)

Utilisez des fonctions d'initiés pour créer des paramètres de sécurité (comme la prévention des XSS et du CSRF)

gitbox 2025-05-28

Dans le développement Web, la sécurité est toujours un problème clé pour les développeurs. Avec l'escalade continue des méthodes d'attaque, les XS (attaque de script de site croisé) et le CSRF (contrefaçon de demande croisée) sont devenus les deux formes d'attaque les plus courantes. Par conséquent, une configuration de sécurité raisonnable est la clé pour prévenir de telles attaques. En tant que langage de programmation largement utilisé, PHP fournit un moyen riche de configurer la sécurité. Cet article explorera comment empêcher efficacement les attaques XSS et CSRF via la configuration de sécurité de la fonction INIT .

Quelles sont les attaques XSS et CSRF?

Attaque XSS (attaque de script inter-sites)

XSS fait référence à un attaquant insérant le code JavaScript malveillant dans une page Web pour inciter les utilisateurs à exécuter ces codes malveillants, volant ainsi les informations sensibles des utilisateurs (telles que les cookies, les données de session, etc.). Les attaques XSS peuvent exécuter des scripts malveillants dans les navigateurs des utilisateurs non autorisés, provoquant une fuite d'informations et des abus.

Attaque du CSRF (contrefaçon de demande croisée)

Les attaques du CSRF sont lorsqu'un attaquant induit les utilisateurs connectés à accéder aux sites Web malveillants, initiant ainsi les demandes non autorisées à l'insu de l'utilisateur. De cette façon, l'attaquant peut utiliser l'identité de la victime pour effectuer diverses opérations (telles que la modification des mots de passe, le transfert d'argent, etc.).

Paramètres sécurisés via la fonction init

En PHP, nous pouvons prévenir efficacement les attaques XSS et CSRF en créant des paramètres de sécurité globaux dans la fonction INIT . La fonction INIT est généralement exécutée lors de l'initialisation de l'application et est un endroit idéal pour configurer la configuration de l'application et gérer les mesures de sécurité globales.

Empêcher les attaques XSS

  1. Encodage de sortie:

    Toute entrée de données d'un utilisateur doit être codée en HTML lors de la sortie vers la page. Cela empêche le code JavaScript malveillant entré par l'utilisateur d'être exécuté par le navigateur.

     function init() {
        // Définir le codage de sortie par défaut,prévenir XSS attaque
        ini_set('html_errors', 0);
    }
    
    // Effectuer lors de la sortie des données utilisateur HTML Encodage d'entité
    function safeOutput($data) {
        return htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
    }
    
    // Exemple:Sortie de la sortie du contenu par l'utilisateur
    echo safeOutput($_GET['user_input']);
    

    Dans le code ci-dessus, la fonction HTMLSpecialChars échappe aux caractères spéciaux (tels que < , > , et, etc.) de l'entrée de l'utilisateur aux entités HTML, en évitant le navigateur l'analyse en code HTML ou JavaScript.

  2. Désactiver JavaScript en ligne:

    Certains navigateurs peuvent permettre l'exécution du code JavaScript en ligne, bien que l'entrée de l'utilisateur ait été échappée. Par conséquent, afin de renforcer davantage la protection, l'exécution de scripts en ligne peut être évitée par des en-têtes HTTP.

     function init() {
        // installation Content Security Policy(CSP)Informations sur l&#39;en-tête,Restreindre la source des scripts
        header("Content-Security-Policy: script-src 'self' https://gitbox.net;");
    }
    

    Dans le code ci-dessus, nous limitons la source du script en définissant les informations d'en-tête de contenu-sécurité-politique et permettons uniquement de charger des scripts JavaScript à partir du nom de domaine actuel et de Gitbox.net pour éviter le chargement de scripts malveillants externes.

Empêcher les attaques du CSRF

  1. Générer et vérifier le jeton CSRF:

    La clé d'une attaque CSRF est de forger des demandes. En utilisant le jeton CSRF, les attaquants peuvent effectivement empêcher les forfaits de faire des demandes. Chaque fois qu'un utilisateur visite une page, le serveur génère un jeton CSRF unique et l'intégre dans le formulaire. Lorsque le formulaire est soumis, le serveur vérifie si le jeton correspond au jeton de la session utilisateur, confirmant ainsi la légitimité de la demande.

     function generateCSRFToken() {
        if (session_status() == PHP_SESSION_NONE) {
            session_start();
        }
        if (empty($_SESSION['csrf_token'])) {
            $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
        }
        return $_SESSION['csrf_token'];
    }
    
    function verifyCSRFToken($token) {
        if (session_status() == PHP_SESSION_NONE) {
            session_start();
        }
        if (empty($_SESSION['csrf_token']) || $token !== $_SESSION['csrf_token']) {
            die('CSRF token validation failed');
        }
    }
    

    Dans le formulaire, générez le jeton CSRF et soumettez-le comme un champ caché:

     // générer Token
    $csrfToken = generateCSRFToken();
    ?>
    
    <form method="POST" action="https://gitbox.net/submit_form.php">
        <input type="hidden" name="csrf_token" value="<?php echo $csrfToken; ?>">
        <!-- Autres champs de forme -->
        <input type="submit" value="Submit">
    </form>
    

    Lorsque le formulaire est soumis, le serveur vérifie si le CSRF_Token dans la demande est cohérent avec le jeton stocké dans la session pour assurer la légitimité de la demande.

  2. Vérifiez l'en-tête du référence:

    Les attaques du CSRF s'appuient généralement sur les utilisateurs pour faire des demandes de site transversal lors de leur connexion.

     function checkReferer() {
        $referer = $_SERVER['HTTP_REFERER'] ?? '';
        if (empty($referer) || strpos($referer, 'gitbox.net') === false) {
            die('Invalid referer');
        }
    }
    

Résumer

En effectuant une configuration de sécurité appropriée dans la fonction INIT , nous pouvons effectivement empêcher les attaques XSS et CSRF. Encodage de sortie, mise en place de la politique de sécurité du contenu, générant et vérification des jetons CSRF et vérification des mesures les plus références sont des moyens efficaces de protéger contre ces attaques. Espérons que les exemples et les meilleures pratiques offerts dans cet article vous aideront à créer des applications PHP plus sécurisées qui protègent les utilisateurs contre les menaces de sécurité potentielles.