Quelles sont les vulnérabilités de sécurité communes dans PHP 7 et comment les éviter?
Vulnérabilités de sécurité courantes en PHP 7 et stratégies d'atténuation:
PHP 7, tout en améliorant ses prédécesseurs, présente toujours plusieurs vulnérabilités de sécurité communes. Ces vulnérabilités découlent souvent de pratiques de codage sans sécurité plutôt que de défauts inhérents dans la langue elle-même. Voici quelques-uns des plus répandus:
- Injection SQL: Ceci se produit lorsque l'entrée utilisateur non fiable est directement incorporée dans les requêtes SQL sans désinfection appropriée. Les attaquants peuvent manipuler cette entrée pour exécuter des commandes SQL arbitraires, potentiellement avoir accès à des données sensibles ou même prendre le contrôle du serveur de base de données. Mitigation: Utilisez toujours des requêtes paramétrées ou des instructions préparées. Ne jamais concaténer directement l'entrée utilisateur dans les requêtes SQL. Utilisez un ORM robuste (mappeur relationnel d'objet) qui gère souvent automatiquement le paramétrisation.
- Scripting de site transversal (XSS): Les vulnérabilités XSS permettent aux attaquants d'injecter des scripts malveillants dans les pages Web visualisées par d'autres utilisateurs. Ces scripts peuvent voler des cookies, rediriger les utilisateurs vers des sites de phishing ou défaire le site Web. Mitigation: Sanitie strictement toutes les données fournies par l'utilisateur avant de l'afficher sur la page Web. Utilisez des fonctions de codage de sortie appropriées au contexte (HTML, JavaScript, etc.). Implémentez une politique de sécurité de contenu (CSP) pour contrôler les ressources que le navigateur est autorisée à charger.
- Falsification de la demande croisée (CSRF): CSRF Attaque des utilisateurs pour effectuer des actions indésirables sur un site Web déjà authentifié. Par exemple, un attaquant peut élaborer un lien qui soumet un formulaire pour transférer des fonds à l'insu de l'utilisateur. Mitigation: Utiliser les jetons CSRF. Ce sont des valeurs uniques et imprévisibles générées pour chaque soumission de formulaire. Le serveur vérifie que le jeton soumis correspond à celui généré, empêchant les demandes non autorisées. Utilisez l'attribut
same-site
Cookie pour atténuer davantage les risques CSRF. - Le détournement de session: Les attaquants peuvent voler l'ID de session d'un utilisateur pour les usurper. Cela peut être réalisé grâce à diverses méthodes, telles que l'exploitation des vulnérabilités dans le système de gestion de session ou l'interception de l'ID de session pendant la transmission. Mitigation: Utilisez des identifiants de session sécurisés et imprévisibles. Implémentez HTTPS pour crypter la communication entre le client et le serveur. Régénérer régulièrement les identifiants de session. Stocker les données de session en toute sécurité, idéalement dans une base de données plutôt que de compter sur des fichiers.
- Vulnérabilités d'inclusion de fichiers: Ces vulnérabilités permettent aux attaquants d'inclure des fichiers arbitraires sur le serveur, en exécutant potentiellement un code malveillant. Cela se produit souvent lorsque l'application comprend dynamiquement des fichiers en fonction de la saisie utilisateur sans validation appropriée. Mitigation: éviter dynamiquement les fichiers en fonction de l'entrée utilisateur. Utilisez une approche de liste blanche, spécifiant exactement quels fichiers peuvent être inclus. Implémentez la validation du chemin du fichier strict.
- Exécution du code distant (RCE): Les vulnérabilités RCE permettent aux attaquants d'exécuter du code arbitraire sur le serveur. Ceci est souvent une conséquence d'autres vulnérabilités, telles que l'injection SQL ou l'inclusion de fichiers. Mitigation: Aborder les vulnérabilités sous-jacentes qui peuvent conduire au RCE. Mettez régulièrement à jour PHP et toutes les bibliothèques dépendantes pour corriger les défauts de sécurité connus. Mettre en œuvre les principes des moindres privilèges, accordant uniquement les autorisations nécessaires à différentes parties de l'application.
Quelles fonctions spécifiques de PHP 7 représentent les plus grands risques de sécurité:
Fonctions PHP 7 avec des fonctions de sécurité significatives, peut-être significativement, peut augmenter le risque de la sécurité. Ceux-ci incluent:
: - Cette fonction exécute une chaîne en tant que code PHP. L'utilisation de avec une entrée utilisateur non animée est extrêmement dangereuse et doit être évitée à tout prix, car elle peut entraîner une exécution arbitraire de code. Utilisez des alternatives plus sûres chaque fois que possible.
eval()
eval()
, - , ,
exec()
: shell_exec()
Ces fonctions exécutent des commandes shell. Semblable à system()
, l'utilisation de ces fonctions avec une entrée utilisateur non animée peut permettre aux attaquants d'exécuter des commandes arbitraires sur le serveur. Si vous devez absolument les utiliser, validez et désinfectez strictement toutes les entrées. Envisagez d'utiliser d'autres approches qui ne nécessitent pas l'exécution de la commande shell. passthru()
eval()
, - , ,
include()
: include_once()
Comme discuté précédemment, ces fonctions peuvent conduire à des vulnérabilités d'inclusion de fichiers si elles sont utilisées sans validation appropriée des chemins de fichier. Utilisez toujours une approche de liste blanche et validez rigoureusement les chemins. require()
require_once()
: - Cette fonction analyse une chaîne de requête en variables. L'utiliser avec une entrée utilisateur non animée peut entraîner diverses vulnérabilités, y compris l'écrasement variable et l'injection de code potentielle. Préférez utiliser et
parse_str()
directement et désinfecter les données de manière appropriée. $_GET
$_POST
: - La désérialisation des données non brisées peut conduire à une exécution de code arbitraire si les données contiennent des objets malveillants. Valider et désinfecter toujours les données avant la désérialisation. Envisagez d'utiliser d'autres méthodes de sérialisation si possible.
unserialize()
Comment puis-je implémenter une validation et une désinfection d'entrée robustes pour protéger mes applications PHP 7?
Implémentation de la validation et de la désinfection des entrées robustes:
La validation et la désinfection des entrées robustes sont des applications PHP 7 robustes. Cela implique deux étapes distinctes:
1. Validation: Cela vérifie si les données d'entrée sont conformes au format et aux contraintes attendues. Cela devrait se produire avant Saisie. La validation peut impliquer:
- Vérification du type de données: Assurez-vous que l'entrée est du type correct (par exemple, entier, chaîne, booléen).
- restrictions de longueur: Limiter la longueur des cordes pour prévenir les débordements et les autres attaques. Les expressions pour valider le format de l'entrée (par exemple, les adresses e-mail, les numéros de téléphone).
- Vérification de la plage: Assurez-vous que l'entrée numérique se situe dans une plage acceptable.
- La liste blanche: ne permet que des valeurs ou des modèles spécifiques. Ceci est généralement préféré à la liste noire.
- 2. Saisie:
Cela nettoie les données d'entrée pour supprimer ou neutraliser les éléments potentiellement nocifs. La désinfection doit être spécifique au contexte:
Html Sanitisation:
Supprimer ou échapper aux balises HTML pour empêcher les attaques XSS. Utilisez des bibliothèques comme le purificateur HTML pour une désinfection HTML robuste.
- Saisition SQL: Utiliser des requêtes paramétrées ou des instructions préparées pour empêcher l'injection SQL.
- Désialisation des URL: Encoder URLS pour prévenir les attaques URL. Saisition:
Supprimer ou échapper aux caractères spéciaux qui pourraient être utilisés dans des expressions régulières. -
Exemple: -
N'oubliez pas de toujours valider
avant
Sansanisation, car la désinfection peut ne pas être suffisante pour prévenir toutes les attaques. Envisagez d'utiliser des filtres d'entrée et des bibliothèques de validation pour rationaliser le processus. Quelles sont les meilleures pratiques pour sécuriser les connexions de la base de données dans les applications PHP 7?
<code class="php">// Validate and sanitize user input for a username field
$username = $_POST['username'];
// Validation: Check length and allow only alphanumeric characters
if (strlen($username) > 255 || !ctype_alnum($username)) {
die("Invalid username.");
}
// Sanitization: Escape for use in a database query (assuming prepared statements are not used)
$sanitizedUsername = mysqli_real_escape_string($conn, $username); // Replace with your database connection
//Use the $sanitizedUsername in your database query</code>
Les meilleures pratiques pour sécuriser les connexions de base de données:
Les connexions de base de données sécurisées sont paramètres paramètres de la sécurité globale d'une application PHP 7. Suivez ces meilleures pratiques:
- Utiliser des instructions préparées ou des requêtes paramétrées: C'est le moyen le plus efficace d'empêcher l'injection SQL. Il sépare le code SQL des données, empêchant les attaquants d'injecter du code malveillant.
- Stocker les informations d'identification en toute sécurité: jamais les informations d'identification de base de données Hardcode directement dans votre code. Utilisez des variables d'environnement ou un fichier de configuration stocké en dehors du webroot.
- Utilisez des mots de passe forts: Choisissez des mots de passe forts et uniques pour vos comptes d'utilisateurs de base de données.
- Principle de privilège le moins: Grant les utilisateurs de la base de données de la base de données uniquement les privilèges nécessaires pour effectuer leurs tasks. Évitez d'accorder des autorisations excessives.
- Activer l'audit de la base de données: Si votre système de base de données le prend en charge, permettez à l'audit de suivre régulièrement l'activité de la base de données et de détecter un comportement suspect. Données:
Crypt des données sensibles stockées dans la base de données, telles que les mots de passe et les informations de carte de crédit. - La validation et la désinfection des entrées (encore!):
Même avec des instructions préparées, la validation des entrées et la désinfection sont toujours essentielles pour empêcher d'autres types d'attaques. - Utiliser HTTPS:
Encarner la communication entre votre application et à utiliser HTTPS. Https. - Activité de la base de données du moniteur:
Surveiller régulièrement l'activité de la base de données pour les modèles ou les anomalies suspects. recommandations. Prioriser toujours les meilleures pratiques de sécurité tout au long du cycle de vie de développement et de déploiement de votre application. -
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