Maison >développement back-end >tutoriel php >Comment éviter les failles de sécurité en PHP ?

Comment éviter les failles de sécurité en PHP ?

PHPz
PHPzoriginal
2023-05-12 08:12:051542parcourir

PHP est un puissant langage de script côté serveur avec une large gamme d'applications. Cependant, il a également été brisé en raison de vulnérabilités du code, ce qui oblige les développeurs PHP à mieux comprendre les problèmes de sécurité. Cet article explique comment éviter les vulnérabilités de sécurité courantes pendant le développement et améliorer la sécurité des applications.

1. Prévenir les attaques par injection SQL

L'attaque par injection SQL est une vulnérabilité de sécurité courante. Elle utilise les données saisies par l'utilisateur pour modifier les instructions de requête SQL afin d'atteindre l'objectif de l'attaquant. Pour éviter cette attaque, vous devez procéder comme suit :

  1. Essayez d'utiliser des instructions de prétraitement pour effectuer des opérations de base de données et traitez les données saisies par l'utilisateur séparément des instructions de requête. La syntaxe des instructions de prétraitement est la suivante :
$stmt = $mysqli->prepare("SELECT * FROM users WHERE username=? AND password=?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
  1. Pour. entrée utilisateur Les données sont filtrées et échappées, et la fonction mysql_real_escape_string() peut être utilisée pour échapper les données.
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
  1. Les personnages pouvant déclencher des attaques par injection sont interdits. Cela inclut des symboles tels que des guillemets simples, des guillemets doubles, des barres obliques inverses, etc.
$data = str_replace(array("'", """, "\"), "", $data);
  1. Prévenir les attaques XSS

L'attaque XSS (Cross-Site Scripting) est une méthode d'attaque qui exploite les vulnérabilités des applications Web pour injecter du code malveillant dans le navigateur de l'utilisateur. Pour éviter cette attaque, vous devez procéder comme suit :

  1. Filtrer les entrées de l'utilisateur pour éviter de saisir du code HTML ou Javascript malveillant. L'échappement HTML peut être effectué à l'aide de la fonction htmlspecialchars().
$name = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
  1. Évitez d'utiliser des méthodes de sortie dangereuses sur la page, telles que l'utilisation directe d'echo ou d'impression pour afficher les données saisies par l'utilisateur.
<input type="text" name="name" value="<?php echo $_POST['name']; ?>">
  1. Utilisez des bibliothèques tierces sécurisées pour filtrer et valider les entrées de l'utilisateur, telles que HTML Purifier, AntiXSS, etc.
  2. Prévention contre les vulnérabilités d'inclusion de fichiers

Une vulnérabilité d'inclusion de fichiers signifie qu'un attaquant injecte du code malveillant dans une application pour contrôler la fonction d'inclusion de fichiers du serveur afin d'exécuter du code malveillant. Pour éviter cette attaque, vous devez procéder comme suit :

  1. Interdire l'inclusion de fichiers contrôlables par l'utilisateur. Évitez d'utiliser des noms de fichiers contrôlables par l'utilisateur comme arguments pour les fonctions include() ou require().
if (!in_array($_GET['file'], array('file1.php', 'file2.php', ...))) {
    die('Invalid file name');
}

include($_GET['file']);
  1. Utilisez des chemins absolus au lieu de chemins relatifs pour l'inclusion de fichiers. Cela empêche les attaquants de construire des chemins relatifs spécifiques pour mener des attaques.
include("/var/www/html/includes/news.php");
  1. Contrôle des autorisations sur les fichiers inclus. Placez les fichiers inclus dans un répertoire séparé et définissez les droits d'accès du répertoire en lecture seule pour empêcher la modification ou la falsification des fichiers malveillants.
  2. Prévenir les attaques de détournement de session et de fixation de session

Le piratage de session signifie que l'attaquant obtient les informations de session de l'utilisateur en volant l'ID de session de l'utilisateur, obtenant ainsi les autorisations et les informations sensibles de l'utilisateur. Une attaque de fixation de session est l'endroit où l'attaquant obtient les autorisations et les informations sensibles de l'utilisateur en corrigeant un identifiant de session malveillant sur le navigateur de l'utilisateur. Pour éviter cette attaque, vous devez procéder comme suit :

  1. Utilisez la fonction session_regenerate_id() pour régénérer l'ID de session et mettre à jour l'ID de session une fois que l'utilisateur s'est connecté ou a modifié son identité.
session_start();
if ($_SESSION['authenticated'] == true) {
    session_regenerate_id();
}
  1. Cryptez l'ID de session, utilisez l'algorithme de cryptage pour crypter l'ID de session et stockez la valeur cryptée dans le cookie, de sorte que même si l'attaquant obtient l'ID de session, il ne peut pas être utilisé directement.
session_start();
$encrypted_session_id = md5($_SESSION['session_id'] . 'secret_key');
$_COOKIE['session_id'] = $encrypted_session_id;
  1. Supprimez régulièrement les enregistrements de sessions expirés pour éviter que les sessions ne soient utilisées de manière malveillante.
session_start();
if (isset($_SESSION['last_access'])) {
    if (time() - $_SESSION['last_access'] > 1800) {
        session_unset();
        session_destroy();
    }
}
$_SESSION['last_access'] = time();

Cet article explique comment éviter les vulnérabilités de sécurité courantes dans le développement PHP et améliorer la sécurité des applications en filtrant les données saisies par l'utilisateur, en utilisant des méthodes d'inclusion de fichiers sécurisées et en empêchant le détournement de session et les attaques de fixation de session. Des applications plus sécurisées peuvent non seulement améliorer l’expérience utilisateur, mais également protéger la confidentialité des utilisateurs et la sécurité des données.

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