Maison  >  Article  >  développement back-end  >  Mesures préventives pour les attaques inter-domaines de session PHP

Mesures préventives pour les attaques inter-domaines de session PHP

WBOY
WBOYoriginal
2023-10-12 14:41:081243parcourir

PHP Session 跨域攻击的防范措施

Mesures préventives de session PHP contre les attaques inter-domaines

Dans les applications Web, la session est un mécanisme important pour suivre le statut de l'utilisateur et stocker les informations de l'utilisateur. Cependant, en raison de la nature des applications Web, les données de session sont vulnérables aux attaques inter-domaines. Cet article présentera quelques mesures préventives courantes en PHP et fournira des exemples de code spécifiques.

1. Définir les propriétés des cookies

En PHP, l'ID de session est généralement stocké dans un cookie. Afin de prévenir les attaques inter-domaines, nous pouvons augmenter la sécurité en définissant les attributs associés des cookies. Plus précisément, les deux attributs de cookie suivants sont relativement courants :

  • "HttpOnly" : marquez le cookie comme HttpOnly afin que JavaScript ne puisse pas accéder au cookie, empêchant ainsi l'obtention de l'ID de session via des scripts.
  • « Sécurisé » : n'envoyez des cookies que sous des connexions HTTPS pour garantir que les identifiants de session ne sont transmis que dans des connexions cryptées sécurisées afin d'éviter toute interception et toute falsification.

Exemple de définition des attributs de cookie via le code PHP :

// 设置会话Cookie
session_start();

// 设定Cookie属性
$cookieParams = session_get_cookie_params();
session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], true, true);

// 写入会话数据
$_SESSION["username"] = "user123";

session_write_close();

2. Vérifiez le nom de domaine source

En vérifiant le nom de domaine source de la demande, vous pouvez vous assurer que la session n'est utilisée que sous le nom de domaine correct. Vous pouvez utiliser la variable $_SERVER['HTTP_REFERER'] pour obtenir le nom de domaine source de la requête. Voici un exemple de fonction permettant de vérifier si le nom de domaine source de la demande est légitime :

function validateReferer($allowedDomain) {
  $referer = $_SERVER['HTTP_REFERER'];
  $urlParts = parse_url($referer);

  if (isset($urlParts['host']) && $urlParts['host'] === $allowedDomain) {
    return true;
  } else {
    return false;
  }
}

// 在合适的地方调用该函数进行验证
if (validateReferer("example.com")) {
  // 执行会话操作
  // ...
} else {
  // 非法来源,处理错误
  // ...
}

3. Générer et vérifier un jeton

La génération et la vérification d'un jeton sont une méthode courante pour empêcher les attaques inter-domaines. A chaque requête, le serveur génère un jeton pour le client et le stocke dans la session. Ensuite, écrivez le jeton dans le formulaire ou envoyez-le au client en tant que paramètre de demande. Lorsque le client soumet la demande, le serveur vérifie à nouveau la validité du jeton.

Ce qui suit est un exemple de code pour générer et vérifier le jeton :

// 生成Token
function generateToken() {
  $token = bin2hex(random_bytes(32));
  $_SESSION["csrf_token"] = $token;
  return $token;
}

// 验证Token
function validateToken($token) {
  if (isset($_SESSION["csrf_token"]) && $_SESSION["csrf_token"] === $token) {
    return true;
  } else {
    return false;
  }
}

// 在合适的地方生成Token并存储
$token = generateToken();

// 在请求的表单中或作为请求参数发送Token
echo '<form method="post">';
echo '<input type="hidden" name="csrf_token" value="' . $token . '">';
echo '<input type="submit" value="Submit">';
echo '</form>';

// 在接收请求的地方验证Token的有效性
if (isset($_POST["csrf_token"]) && validateToken($_POST["csrf_token"])) {
  // Token有效,执行操作
  // ...
} else {
  // Token无效,处理错误
  // ...
}

Il convient de noter que la méthode mentionnée ci-dessus n'est qu'une des précautions courantes dans les applications réelles, vous devez choisir celle qui convient en fonction de la situation spécifique. et la méthode. De plus, il est tout aussi important de maintenir votre application à jour et de réagir rapidement aux vulnérabilités de sécurité connues.

Résumé : en définissant les attributs des cookies, en vérifiant le nom de domaine source et en générant et en vérifiant le jeton, vous pouvez empêcher efficacement les attaques inter-domaines de session PHP. Pendant le processus de développement, vous devez toujours prêter attention à la sécurité de votre application et prendre les mesures appropriées pour protéger les données et la confidentialité des utilisateurs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn