Maison  >  Article  >  développement back-end  >  PHP implémente une programmation sécurisée : attaque et défense pratiques contre les pirates

PHP implémente une programmation sécurisée : attaque et défense pratiques contre les pirates

WBOY
WBOYoriginal
2023-06-18 10:55:251455parcourir

Avec le développement et l'approfondissement continus d'Internet, diverses attaques de pirates informatiques se sont produites fréquemment, posant de sérieuses menaces à la sécurité du réseau. PHP est un langage de développement Web couramment utilisé par de nombreuses entreprises et développeurs pour créer des sites Web et des applications. Par conséquent, dans la programmation PHP, la manière de mettre en œuvre une programmation sécurisée est devenue très importante.

Cet article présentera les vulnérabilités de sécurité courantes dans le langage PHP et comment prévenir ces vulnérabilités. Dans le même temps, nous partagerons également quelques cas d’attaques de pirates informatiques et les contre-mesures correspondantes.

  1. Injection SQL

L'injection SQL est actuellement l'une des méthodes d'attaque Web les plus courantes. Les attaquants profitent de la vulnérabilité des instructions SQL dans la zone de saisie et obligent l'application à exécuter du code SQL malveillant via certaines entrées spécifiques, obtenant et falsifiant ainsi des données.

Comment empêcher l'injection SQL ?

① Utilisation d'instructions préparées

Les instructions préparées peuvent être implémentées à l'aide de l'extension PDO ou MySQLi en PHP. Les instructions préparées séparent les instructions SQL et les entrées utilisateur avant l'exécution, évitant ainsi les attaques par injection d'entrées utilisateur sur les instructions SQL.

Exemple de code :

$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');
$stmt->bindParam(':username', $username);
$stmt->execute();

② Entrée de filtre

À aucun moment ne faites confiance à l'entrée de l'utilisateur. Filtrez toujours les entrées des utilisateurs. Vous pouvez utiliser la fonction filter_input en PHP ou le développeur écrit sa propre fonction de filtre.

Exemple de code :

// 使用filter_input来避免SQL注入
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_SPECIAL_CHARS);

③ Restreindre la saisie de l'utilisateur

Restreindre la saisie est une méthode de validation plus stricte qui empêche les utilisateurs de saisir du code SQL malveillant. Par exemple, vous pouvez stipuler que le nom d'utilisateur ne doit pas contenir de caractères spéciaux ou doit être supérieur ou égal à 6 caractères.

  1. Attaque de script cross-site (XSS)

L'attaque de script cross-site est une méthode d'attaque contre les applications Web. L'attaquant intègre du code de script dans le site Web, qui sera exécuté lorsque l'utilisateur visitera le site Web.

Comment prévenir les attaques XSS ?

① Filtrer les entrées utilisateur

Tout comme pour empêcher l'injection SQL, vous devez également filtrer les entrées utilisateur. Par exemple, vous pouvez utiliser la fonction htmlspecialchars pour filtrer les entrées utilisateur et convertir les caractères spéciaux en entités HTML.

Exemple de code :

echo htmlspecialchars($_POST['message']);

② Marquer les cookies comme HTTP uniquement

Lors de la configuration des cookies, vous pouvez utiliser la balise HTTP uniquement. Cela empêchera JavaScript et d'autres scripts côté client d'accéder au cookie. Si un attaquant ne peut pas accéder aux cookies, il ne peut pas utiliser d'attaques de piratage de session.

Exemple de code :

setcookie('session_id', $session_id, time() + 86400, '/', '', true, true);
  1. Vulnérabilité d'inclusion de fichiers

La vulnérabilité d'inclusion de fichiers est une méthode d'attaque Web courante. Les attaquants utiliseront certains moyens pour manipuler le système de fichiers du serveur afin de contenir et d'exécuter du code malveillant.

Comment prévenir les vulnérabilités d'inclusion de fichiers ?

① Utiliser des chemins absolus

Les chemins relatifs sont réalisables dans certaines circonstances, mais ils peuvent être exploités lorsque vous rencontrez des outils limités ou lorsque la structure des répertoires change. Utilisez des chemins absolus pour éviter ce type de problème.

Exemple de code :

// 路径在Unix系统下
include '/var/www/html/includes/config.php';

② Limiter les répertoires d'inclusion de fichiers

Restreindre les répertoires pouvant être inclus est l'un des moyens les plus directs et les plus efficaces d'assurer la sécurité de l'inclusion de fichiers. Les développeurs peuvent coder en dur les chemins de fichiers pouvant être inclus dans l'application ou utiliser l'option open_basedir dans le fichier php.ini pour limiter les chemins de fichiers accessibles.

  1. Attaque CSRF

L'attaque CSRF (Cross-Site Request Forgery), également appelée attaque de falsification de requêtes intersites, fait référence à une attaque dans laquelle un attaquant utilise l'identité d'un utilisateur connecté pour effectuer certaines opérations sans l'autorisation de celui-ci. connaissances de l'utilisateur.

Comment prévenir les attaques CSRF ?

① Vérifier l'en-tête HTTP Referer

L'en-tête HTTP Referer fait référence à la page Web à partir de laquelle l'utilisateur crée un lien vers la page cible. Dans les attaques CSRF, les attaquants ne parviennent souvent pas à forger le bon en-tête HTTP Referer. Par conséquent, les développeurs peuvent vérifier l’en-tête HTTP Referer pour détecter d’éventuelles attaques CSRF.

Exemple de code :

// 从HTTP Referer头中获取URL
$referrer = parse_url($_SERVER['HTTP_REFERER']);
if ($referrer['host'] !== 'example.com')
{
    // 可能是CSRF攻击,拒绝请求
    die('CSRF detected!');
}

② Ajouter un jeton CSRF

Le jeton CSRF est un moyen efficace de se protéger contre les attaques CSRF. À chaque soumission de formulaire, générez un identifiant unique qui est inclus dans les données du formulaire pour éviter les fausses soumissions de formulaire.

Exemple de code :

// 在表单中添加CSRF令牌
session_start();
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
echo '<input type="hidden" name="csrf_token" value="' . $_SESSION['csrf_token'] . '">';

Lorsque l'attaquant soumet le formulaire, il est nécessaire de vérifier si le jeton CSRF est correct :

// 验证CSRF令牌是否正确
session_start();
if ($_POST['csrf_token'] !== $_SESSION['csrf_token'])
{
    // 可能是CSRF攻击,拒绝请求
    die('CSRF detected!');
}
  1. Les cas réels d'attaque et de défense de hackers

Les cas d'attaque de hacker sont courants. Voici un scénario d'attaque typique :

Une fois que l'attaquant a obtenu le nom d'utilisateur et le mot de passe, il tente d'afficher la liste des utilisateurs du site Web cible. Le site Web est développé en PHP et utilise une base de données MySQL pour stocker les informations. L'attaquant a essayé d'utiliser certaines méthodes d'injection SQL de base et a finalement obtenu la liste des utilisateurs du site Web cible grâce à l'attaque par injection.

Comment faire face à cette attaque ?

Cette attaque peut être évitée grâce aux mesures suivantes :

① Validation stricte des entrées utilisateur

Comme mentionné précédemment, les attaques par injection SQL peuvent être évitées en filtrant les entrées utilisateur, en limitant les entrées utilisateur, en utilisant des instructions préparées, etc.

② Renforcer le contrôle d'accès

Afin de garantir la sécurité des données des utilisateurs, le contrôle d'accès doit être renforcé et les autorisations appropriées doivent être définies. Seuls les utilisateurs disposant d'autorisations spécifiques peuvent effectuer des opérations associées, telles que l'affichage de la liste des utilisateurs.

③ Cryptage

Le cryptage peut protéger les informations sensibles, telles que les mots de passe, les informations de compte, etc. Vous devez vous assurer que toutes les informations sensibles sont cryptées lors de leur stockage et de leur transmission.

Résumé

Cet article présente les vulnérabilités de sécurité courantes dans la programmation PHP et comment prévenir ces vulnérabilités, notamment l'injection SQL, les attaques de scripts intersites, les vulnérabilités d'inclusion de fichiers, les attaques CSRF, etc. En outre, nous avons également analysé un cas d’attaque de pirate informatique et fourni les contre-mesures correspondantes. Grâce à ces mesures, les développeurs peuvent améliorer la sécurité de leurs applications et protéger les données des utilisateurs.

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