Maison >développement back-end >tutoriel php >Comment assurer la sécurité du code des fonctions PHP ?

Comment assurer la sécurité du code des fonctions PHP ?

PHPz
PHPzoriginal
2024-04-30 14:45:02949parcourir

Afin d'assurer la sécurité du code de fonction PHP, il est recommandé de suivre les bonnes pratiques suivantes : valider les entrées utilisateur, encoder les données de sortie, limiter l'exécution des fonctions, désactiver les fonctions inutiles, utiliser des requêtes paramétrées et utiliser des frameworks de sécurité. Dans des cas pratiques, lors de la vérification du nom soumis par l'utilisateur, l'entrée doit être filtrée et son format vérifié pour empêcher l'injection de code malveillant.

如何保障 PHP 函数的代码安全?

Comment assurer la sécurité du code des fonctions PHP

Dans le développement PHP, assurer la sécurité du code des fonctions est crucial. Voici quelques bonnes pratiques pour vous assurer que votre code ne peut pas être exploité de manière malveillante :

Validation des entrées

Validez les entrées de l'utilisateur pour empêcher l'injection SQL, les scripts intersites (XSS) et autres attaques. Les méthodes suivantes peuvent être utilisées :

  • Fonction filter_input() : Valider l'entrée à l'aide d'un type de filtre prédéfini.
  • Fonction htmlspecialchars() : Convertir les caractères spéciaux en entités HTML.
  • Expressions régulières : Vérifiez que l'entrée correspond à un modèle spécifique.

Exemple :

$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);

Output Encoding

Encodez les données de sortie pour empêcher les attaques XSS. Les méthodes suivantes peuvent être utilisées :

  • Fonction htmlspecialchars() : Convertir les caractères spéciaux en entités HTML.
  • Fonction json_encode() : Encodez les données au format JSON.
  • Fonction urlencode() : Encodez les données dans un format compatible URL.

Exemple :

echo htmlspecialchars($output);

Limiter l'exécution de la fonction

Utilisez les fonctions PHP set_time_limit() et ini_set() pour définir le temps d'exécution et la limite de mémoire de la fonction afin d'éviter les boucles infinies ou les attaques par épuisement des ressources.

Exemple :

set_time_limit(30);
ini_set('memory_limit', '128M');

Désactivez les fonctionnalités inutiles

Désactivez les fonctionnalités PHP inutiles telles que Allow_url_fopen() et Allow_url_include() pour réduire la surface d'attaque.

Exemple :

ini_set('allow_url_fopen', 'Off');
ini_set('allow_url_include', 'Off');

Utilisez des requêtes paramétrées

Utilisez des requêtes paramétrées au lieu de la concaténation de chaînes pour exécuter des requêtes de base de données afin d'empêcher les attaques par injection SQL.

Exemple :

$stmt = $mysqli->prepare("SELECT * FROM users WHERE name = ?");
$stmt->bind_param('s', $name);
$stmt->execute();

Utilisez un framework de sécurité

Envisagez d'utiliser un framework de sécurité PHP tel que CodeIgniter ou Symfony, qui fournit des fonctionnalités de sécurité et des bonnes pratiques prêtes à l'emploi.

Cas pratique

Scénario : Vérifiez le nom soumis par l'utilisateur via le formulaire.

Code :

$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);

if (empty($name)) {
    throw new InvalidArgumentException("Name cannot be empty.");
}

if (!preg_match('/^\w+$/', $name)) {
    throw new InvalidArgumentException("Name can only contain alphanumeric characters.");
}

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