Maison  >  Article  >  développement back-end  >  Comment éviter les risques de sécurité par injection de commandes dans le développement du langage PHP

Comment éviter les risques de sécurité par injection de commandes dans le développement du langage PHP

WBOY
WBOYoriginal
2023-06-09 18:32:451247parcourir

Avec le développement rapide de la technologie Internet, les applications Web jouent un rôle de plus en plus important dans notre vie quotidienne. En tant que langage de programmation Web largement utilisé, PHP est également devenu la cible d’activités de cyberattaque. Parmi eux, les risques de sécurité par injection de commandes constituent une menace importante à laquelle PHP est confronté. Cet article présente quelques méthodes permettant d'éviter de tels risques de sécurité dans le développement PHP.

1. Qu'est-ce qu'une attaque par injection de commandes ?

L'attaque par injection de commandes fait référence à un pirate informatique qui injecte des commandes système malveillantes dans une application Web via les paramètres d'entrée de l'application Web et les place sur le serveur d'application Web. L'attaque par injection de commandes est une méthode d'attaque très dangereuse qui permet aux pirates de contrôler directement le serveur d'une application Web sans restrictions, obtenant ainsi un contrôle total sur le serveur.

2. Deux formes d'attaques par injection de commandes

Les attaques par injection de commandes peuvent être divisées en deux formes dans les attaques réelles. L'une consiste à utiliser directement les paramètres d'entrée de l'application Web pour attaquer, et l'autre consiste à obtenir les autorisations système par d'autres moyens, puis à attaquer.

  1. Utilisez directement les paramètres d'entrée de l'application Web pour attaquer

Lorsque l'utilisateur soumet des données à l'application Web via POST ou GET, le pirate informatique peut injecter des chaînes avec des commandes système dans les données, permettant ainsi à l'application Web de Le programme exécute ces commandes malveillantes lors de son exécution. Par exemple, un exemple de code pour une attaque courante par injection de commandes ressemble à ceci :

mysql_query("SELECT * FROM user WHERE name = '".$_POST['name']."' AND password = '".$_POST['password']."'");

Lorsqu'un utilisateur saisit son nom d'utilisateur et son mot de passe via un formulaire pour se connecter, un pirate informatique peut injecter une chaîne avec une commande système malveillante dans le formulaire, comme affiché ci-dessous Affichage :

a' OR 1=1; DROP TABLE user;#

Cette commande amènera l'application Web à effectuer une opération "OU" lors de l'exécution d'une requête SQL et à supprimer une table nommée "utilisateur".

  1. Obtenez les autorisations système par d'autres moyens, puis attaquez

Les pirates peuvent obtenir les autorisations système par d'autres moyens, comme l'exploitation d'autres vulnérabilités dans les applications Web ou le piratage direct du mot de passe du serveur. Une fois que les pirates obtiennent les privilèges système, ils peuvent directement prendre le contrôle du serveur via une attaque par injection de commandes. Par exemple, un pirate informatique peut effectuer une simple attaque par injection de commande via la commande suivante :

system(“rm -rf /”);

Cette commande supprimera tous les fichiers et répertoires du serveur, provoquant des pertes très graves.

3. Comment éviter les attaques par injection de commandes

Après avoir maîtrisé les connaissances de base des attaques par injection de commandes, nous pouvons éviter ce risque de sécurité grâce aux méthodes suivantes :

  1. Utilisez des instructions préparées

Les instructions prétraitées sont une requête SQL sécurisée. méthode qui peut éviter les attaques par injection SQL et les attaques par injection de commandes et améliorer les performances des applications. Les instructions préparées peuvent être implémentées à l'aide de bibliothèques d'extension telles que PDO ou MySQLi.

Par exemple, voici un exemple de code qui utilise des instructions préparées par PDO pour exécuter des requêtes SQL :

$pdo = new PDO(‘mysql:host=hostname;dbname=database_name;’, ‘username’, ‘password’);
$stmt = $pdo->prepare(‘SELECT name FROM user WHERE email = :email’);
$stmt->execute(array(‘email’ => $email));
  1. Filtrer et valider les données d'entrée

Avant d'implémenter la logique du programme, nous devons filtrer et valider les données traitées. Vous pouvez utiliser les fonctions intégrées de PHP telles que intval(), floatval(), trim() et d'autres fonctions pour filtrer et vérifier les données. . intval()floatval()trim()等函数来过滤和验证数据。

例如,以下示例代码演示了如何使用filter_input()函数来过滤和验证输入数据:

$name = filter_input(INPUT_POST, ‘name’, FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, ‘email’, FILTER_VALIDATE_EMAIL);
$password = filter_input(INPUT_POST, ‘password’, FILTER_SANITIZE_SPECIAL_CHARS);
  1. 对系统命令进行严格的输入验证和过滤

在执行系统命令之前,必须对输入的命令进行严格的验证和过滤。可以使用一些可信的命令行参数来限制输入。

例如,以下示例代码演示了如何使用escapeshellcmd()

Par exemple, l'exemple de code suivant montre comment utiliser la fonction filter_input() pour filtrer et valider les données d'entrée :
    $command = escapeshellcmd($_POST['command']);
    $output = shell_exec($command);
    1. Validation stricte des entrées et filtrage du système commandes

    Avant d'exécuter les commandes système, les commandes saisies doivent être strictement vérifiées et filtrées. La saisie peut être restreinte à l'aide de certains paramètres de ligne de commande fiables.

    Par exemple, l'exemple de code suivant montre comment utiliser la fonction escapeshellcmd() pour filtrer les arguments de ligne de commande :

    $allowed_types = array('png', 'jpg', 'gif');
    $file_type = substr(strrchr($_FILES['file']['name'], '.'), 1);
    if(!in_array($file_type, $allowed_types)) {
        die("Invalid file type.");
    }
    if ($_FILES['file']['size'] > 1000000) {
        die("File size too large.");
    }

    Utiliser le contrôle d'accès sécurisé au système de fichiers et la gestion du téléchargement de fichiers 🎜🎜🎜In In applications Web, les utilisateurs peuvent télécharger des fichiers, ce qui nécessite une attention particulière. Parce que les pirates peuvent effectuer des attaques par injection de CSS et de commandes en téléchargeant des fichiers. Par conséquent, le type et la taille du fichier doivent être vérifiés lors du processus de téléchargement du fichier et le fichier téléchargé doit être enregistré dans un système de fichiers indépendant en dehors du serveur Web. 🎜🎜Par exemple, l'exemple de code suivant montre comment vérifier et filtrer les fichiers téléchargés : 🎜rrreee🎜Les méthodes ci-dessus permettent d'éviter les attaques par injection de commandes dans le développement PHP. Une utilisation raisonnable de ces méthodes peut grandement améliorer le Web. applications. 🎜

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