Maison >développement back-end >tutoriel php >Comment empêcher les attaques par inclusion de fichiers à l'aide de PHP

Comment empêcher les attaques par inclusion de fichiers à l'aide de PHP

WBOY
WBOYoriginal
2023-06-24 16:22:471213parcourir

Avec le développement rapide d'Internet, les questions de sécurité sont devenues un enjeu important qui ne peut être ignoré. Les attaques par inclusion de fichiers sont une méthode d'attaque très courante et dangereuse. L'essentiel est que les attaquants peuvent utiliser cette vulnérabilité pour obtenir des informations sensibles sur le serveur. Par conséquent, comment utiliser PHP pour empêcher les attaques par inclusion de fichiers est devenu un problème que de nombreux développeurs doivent résoudre.

1. Comprendre les attaques par inclusion de fichiers

Les attaques par inclusion de fichiers sont une attaque Web courante et sont répertoriées comme l'une des dix principales vulnérabilités de sécurité Web de l'OWASP (Open Web Application Security Project). Il peut être divisé en inclusion de fichiers locaux (LFI) et inclusion de fichiers distants (RFI).

Vulnérable aux attaques LFI lors de l'utilisation de données externes non filtrées pour générer des chemins de fichiers. Par exemple, le code suivant concatène un nom de fichier soumis par l'utilisateur avec un chemin d'accès :

<?php
$file = '/home/user/'. $_GET['file'];
include($file);
?>

Une attaque LFI se produit lorsqu'un utilisateur fournit des données en utilisant un chemin relatif tel que ../.

L'attaque RFI signifie que l'attaquant peut exécuter son propre code à distance sur le serveur. Par exemple, le code suivant inclut une URL soumise par l'utilisateur directement via la fonction file_get_contents() :

<?php
$url = $_GET['url'];
$content = file_get_contents($url);
echo $content;
?>

Les attaques RFI se produisent lorsqu'un attaquant fournit sa propre URL malveillante.

2. Prévenir les attaques LFI

Afin de prévenir les attaques LFI, nous devons filtrer les noms de fichiers et les chemins fournis par les utilisateurs. L'utilisation de chemins absolus est un bon moyen de prévenir les attaques LFI.

Ce qui suit est un exemple de filtrage possible, utilisant une approche de liste blanche incluant les noms de fichiers et les chemins autorisés à inclure :

<?php
$allowed_files = array("file1.php", "file2.php");
$allowed_paths = array("/path1/", "/path2/");

$file = $_GET['file'];
$path = $_GET['path'];

if (!in_array($file, $allowed_files) || !in_array($path, $allowed_paths)) {
    die("Access Denied");
}

include("/home/user/" . $path . $file);
?>

L'utilisation d'une approche de liste blanche peut réduire le risque d'attaques LFI. Si vous ne souhaitez pas utiliser la méthode de liste blanche, vous pouvez également utiliser la méthode de limitation des types de fichiers :

<?php
$file = $_GET['file'];

// 判断$file是否是php文件
if (!preg_match("/.php$/", $file)) {
    die("Access Denied");
}

include("/home/user/" . $file);
?>

Limiter les types de fichiers peut empêcher l'inclusion d'autres types de fichiers.

3. Prévenir les attaques RFI

Afin de prévenir les attaques RFI, nous devons filtrer les URL fournies par les utilisateurs. Lorsque vous utilisez une liste blanche, l'accès ne doit être autorisé qu'aux serveurs distants que vous spécifiez. Par exemple, vous pouvez définir l'option allow_url_fopen dans le fichier php.ini ou utiliser la fonction curl.

Voici un exemple de prévention des attaques RFI :

<?php
$url = $_GET['url'];

// 验证是否是信任的主机
if (!preg_match("/^http://(192.168.0.16|www.example.com)/", $url)) {
    die("Access Denied");
}

$content = file_get_contents($url);
echo $content;
?>

Dans cet exemple, nous limitons le processus de vérification aux hôtes spécifiés.

4. Autres mesures de sécurité lors de l'utilisation de PHP

  1. Désactiver les fonctions dangereuses

Certaines fonctions peuvent accéder aux fichiers système, tels que eval(), exec(), etc., de sorte qu'elles sont facilement contaminées ou mal utilisées. Pour une sécurité améliorée, ces fonctions doivent être désactivées.

  1. Version PHP

Dans les anciennes versions de PHP, il existe plus de risques de vulnérabilités d'inclusion de fichiers. Par conséquent, garder votre version PHP à jour est un moyen de réduire les vulnérabilités et d’améliorer la sécurité.

  1. Contrôle des autorisations

Pour garantir que les fichiers ne sont disponibles que pour les scripts ou les utilisateurs destinés à les exécuter, des contrôles d'autorisation appropriés (tels que la propriété des fichiers et les droits d'accès) doivent être utilisés.

Ainsi, la sécurité doit primer lors de l’écriture d’applications Web utilisant PHP. Prendre des mesures de sécurité appropriées, telles que l'utilisation de méthodes de liste blanche, la restriction des types de fichiers, la désactivation des fonctions dangereuses, la mise à jour des versions de PHP et l'utilisation de contrôles d'autorisation, peuvent réduire efficacement le risque d'attaques par inclusion de fichiers.

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