Comment utiliser PHP pour se défendre contre les attaques par injection SQL et par inclusion de fichiers à distance
Avec le développement d'Internet, les problèmes de sécurité des réseaux sont devenus de plus en plus graves. Les attaques par injection SQL et par inclusion de fichiers à distance sont l’une des vulnérabilités de sécurité les plus courantes lors du développement Web. Pour les langages de script côté serveur comme PHP, il est crucial de se défendre correctement contre ces attaques. Cet article explique comment utiliser PHP pour se défendre contre les attaques par injection SQL et par inclusion de fichiers distants.
1.1 Utilisez des instructions préparées :
Les instructions préparées sont un mécanisme qui sépare les requêtes SQL et les paramètres d'exécution, ce qui peut empêcher efficacement les attaques par injection SQL. En PHP, utilisez les extensions PDO (PHP Data Objects) ou mysqli (MySQL Improvementd) pour exécuter les instructions préparées. Par exemple :
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username'); $stmt->bindParam(':username', $username); $stmt->execute();
1.2 Validation et filtrage des entrées :
La validation et le filtrage des entrées avant d'accepter les entrées de l'utilisateur sont une étape importante pour se défendre contre les attaques par injection SQL. Utilisez les fonctions de filtre de PHP (telles que filter_var()
) pour valider et filtrer les entrées de l'utilisateur. Par exemple : filter_var()
)对用户输入进行验证和过滤。例如:
$username = $_POST['username']; if (!filter_var($username, FILTER_VALIDATE_EMAIL)) { // 非法的邮箱地址 } else { // 执行数据库操作 }
1.3 使用参数化查询:
参数化查询是使用占位符(如?
或:name
)替代用户输入,再通过绑定参数的方式将用户输入与查询语句相连。这样可以防止用户输入被误解为SQL代码。例如:
$sql = 'SELECT * FROM users WHERE username = ?'; $stmt = $pdo->prepare($sql); $stmt->bindParam(1, $username); $stmt->execute();
2.1 禁用allow_url_include
:
在PHP配置文件中,将allow_url_include
allow_url_include = Off
Les requêtes paramétrées utilisent des espaces réservés (tels que ?
ou :name
) pour remplacer les entrées de l'utilisateur, puis lier les paramètres pour se connecter entrée de l'utilisateur pour interroger les instructions. Cela évite que les entrées de l'utilisateur soient interprétées à tort comme du code SQL. Par exemple :
$allowed_files = ['header.php', 'footer.php']; $file = $_GET['file']; if (in_array($file, $allowed_files)) { include($file); } else { // 非法的文件路径 }
Les attaques par inclusion de fichiers distants (RFI) font référence à des attaquants exécutant du code malveillant en incluant des fichiers malveillants sur un serveur distant. Voici quelques mesures pour vous défendre contre les attaques par inclusion de fichiers distants :
2.1 Désactivez allow_url_include
:
Dans le fichier de configuration PHP, définissez allow_url_include
sur désactivé. Cela bloque la fonctionnalité d'inclusion de fichiers distants de PHP. Par exemple :
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!