Pratiques de programmation PHP pour empêcher les attaques par traversée de répertoire
L'attaque par traversée de répertoire, également connue sous le nom de vulnérabilité de saut de répertoire et de vulnérabilité de traversée de chemin, est une vulnérabilité de sécurité Web courante. En créant des entrées malveillantes, les attaquants tentent d'obtenir des fichiers sensibles dans le système ou d'effectuer des opérations malveillantes. Cet article explique comment utiliser PHP pour écrire du code sécurisé afin d'empêcher les attaques par traversée de répertoires. Ci-dessous, nous développerons trois aspects : le filtrage et la vérification des entrées de l'utilisateur, le contrôle de sécurité du traitement du chemin des fichiers et le contrôle des autorisations d'accès aux fichiers.
1. Filtrage et vérification des entrées utilisateur
L'essence des attaques par traversée de répertoires est obtenue grâce aux entrées utilisateur, les entrées utilisateur doivent donc d'abord être efficacement filtrées et vérifiées. PHP fournit une série de fonctions de filtrage et d'expressions régulières pour implémenter cette fonction. Par exemple, vous pouvez utiliser la fonction preg_match()
pour effectuer une correspondance régulière sur les entrées utilisateur, en autorisant uniquement les entrées contenant des caractères légaux. L'exemple de code est le suivant : preg_match()
函数对用户输入进行正则匹配,只允许包含合法字符的输入。示例代码如下:
function validate_input($input) { // 允许的字符为字母、数字、下划线、点和斜杠 $pattern = '/^[a-zA-Z0-9_./]+$/'; if (preg_match($pattern, $input)) { return true; } else { return false; } }
二、文件路径处理的安全控制
在PHP中,使用相对路径或绝对路径进行文件操作是常见的。为了防止目录遍历攻击,需要对用户输入的路径进行安全控制。首先,可以使用realpath()
函数将用户输入的相对路径转换为绝对路径。接下来,使用basename()
function safe_path($path) { $basepath = '/var/www/html/uploads/'; $realpath = realpath($basepath . $path); if (strpos($realpath, $basepath) === 0) { return basename($realpath); } else { return false; } }
realpath()
pour convertir le chemin relatif saisi par l'utilisateur en chemin absolu. Ensuite, utilisez la fonction basename()
pour obtenir la partie nom de fichier du chemin et comparez-la à un chemin de fichier sûr. L'exemple de code est le suivant : <Directory "/var/www/html/uploads"> Options -Indexes AllowOverride None Order allow,deny Allow from all </Directory>
rrreee
Grâce aux mesures de sécurité ci-dessus, nous pouvons empêcher efficacement les attaques par traversée de répertoires. Toutefois, les mesures de sécurité ne constituent qu’une partie des mesures de prévention. Le moyen le plus efficace consiste à faire de la sécurité un élément clé de l’ensemble du processus de développement d’applications Web et à effectuer des tests de sécurité complets. 🎜🎜En résumé, grâce au filtrage et à la vérification des entrées utilisateur, au contrôle de sécurité du traitement du chemin de fichier et au contrôle des autorisations d'accès aux fichiers, nous pouvons améliorer la sécurité du code PHP et empêcher efficacement les attaques par traversée de répertoires. Dans le même temps, nous devons également continuer à prêter attention aux dernières tendances et vulnérabilités dans le domaine de la sécurité Web, et mettre à jour et améliorer rapidement nos mesures de sécurité pour garantir la sécurité des applications Web. 🎜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!