Dans les applications Web, les sessions sont un moyen important de suivre l'état de l'utilisateur et de stocker des informations. Cependant, en raison de l'ouverture de l'environnement Web, les données de session sont sensibles aux attaques inter-domaines. Cet article partagera des techniques de protection communes et pratiques en PHP et comprendra des exemples de code spécifiques.
L'ID de session est généralement stocké dans les cookies. Pour éviter les attaques de domaine transversal, la sécurité peut être améliorée en ajustant les attributs de cookies. Principalement impliqué:
Exemple de code:
session_start (); <p>// Obtenez le paramètre de cookie actuel<br> $ cookieParams = session_get_cookie_params ();</p> <p>// définir des attributs de cookies sûrs<br> session_set_cookie_params (<br> $ cookieParams ["Lifetime"],<br> $ cookieParams ["Path"],<br> $ cookieParams ["domaine"],<br> vrai, // sécurisé<br> Vrai // httponly<br> ));</p> <p>$ _Session ["nom d'utilisateur"] = "user123";</p> <p>session_write_close ();<br>
En vérifiant le nom de domaine source demandé, assurez-vous que l'opération de session ne se produit que sous le nom de domaine autorisé, en réduisant le risque d'attaques entre domaine. Il peut être implémenté en utilisant $ _server ['http_referrer'] :
if (isset($urlParts['host']) && $urlParts['host'] === $allowedDomain) {
return true;
} else {
return false;
}
}
// Utilisez l'exemple
if (validatereferrer ("example.com")) {
// Effectuer des opérations liées à la session
} autre {
// Source illégale, accès refusé ou invité
}
Générez un jeton unique pour chaque session, transportez-le lorsque le client demande et vérifiez la cohérence du jeton côté serveur pour empêcher les demandes de contrefaçon:
// générer des jetons fonction générationtoken () { $ token = bin2hex (random_bytes (32)); $ _Session ["csrf_token"] = $ token; retourner $ token; } <p>// Vérifiez le jeton<br> fonction validateToken (token $) {<br> return isset ($ _ session ["csrf_token"]) && $ _Session ["csrf_token"] === $ token;<br> }</p> <p>// générer des jetons et les sortir pour former<br> $ token = generateToken ();</p> <p>écho '<form method="post"> ';;<br> écho '<input type="hidden" name="csrf_token" value="' . $token . '"> ';;<br> écho '<input type="submit" value="Soumettre"> ';;<br> écho '</form> ';;</p> <p>// Vérifiez le traitement de la demande<br> if (isset ($ _ post ["csrf_token"]) && validateToken ($ _ post ["csrf_token"])) {<br> // Le jeton est valide, effectuez des opérations<br> } autre {<br> // Le jeton n'est pas valide, l'opération est refusée<br> }<br>
En définissant raisonnablement les attributs de cookies, en vérifiant le domaine de la source de demande et en adoptant le mécanisme de jeton, vous pouvez protéger efficacement les risques d'attaque inter-domaine de la session PHP. Il est recommandé de combiner des scénarios commerciaux spécifiques dans le développement réel, de continuer à prêter attention aux vulnérabilités de sécurité et à mettre à jour les politiques en temps opportun pour assurer les données des utilisateurs et la sécurité de la confidentialité.