Maison >développement back-end >tutoriel php >Mesures de sécurité pour PHP et CGI : Comment empêcher le piratage de votre site Web
Mesures de protection de sécurité pour PHP et CGI : Comment empêcher les sites Web d'être attaqués par des pirates informatiques
Avec la popularité et le développement d'Internet, les problèmes de sécurité des sites Web ont attiré de plus en plus d'attention. PHP et CGI, en tant que langages de programmation Web couramment utilisés, doivent également renforcer les mesures de sécurité pour prévenir les attaques de pirates. Cet article présentera quelques mesures de protection de sécurité pour PHP et CGI et fournira des exemples de code correspondants.
Les entrées utilisateur sont la partie la plus vulnérable aux pirates informatiques. En validant et en filtrant les entrées utilisateur, le risque d'être attaqué peut être considérablement réduit. Voici quelques exemples courants de codes de validation des entrées utilisateur.
1.1. Pour la saisie de chaîne, vous pouvez utiliser la fonction de filtre pour filtrer les entrées de l'utilisateur afin d'éviter les attaques par injection courantes.
Exemple de code :
$input = $_GET['input']; $filteredInput = filter_var($input, FILTER_SANITIZE_STRING);
1.2. Pour la saisie numérique, vous pouvez utiliser la fonction is_numeric() pour vérifier que la saisie est un nombre valide.
Exemple de code :
$input = $_GET['input']; if(!is_numeric($input)){ die("Invalid input"); }
1.3. Pour les entrées dans des formats spécifiques tels que les adresses e-mail et les URL, des expressions régulières peuvent être utilisées pour la vérification.
Exemple de code :
$email = $_GET['email']; if(!preg_match("/^w+([.-]?w+)*@w+([.-]?w+)*(.w{2,3})+$/", $email)){ die("Invalid email"); }
Le mot de passe est une protection importante pour les comptes d'utilisateurs. Il est très nécessaire de prendre certaines mesures pour améliorer la sécurité des mots de passe.
2.1. Utiliser la fonction de hachage de mot de passe
Lors du stockage des mots de passe utilisateur, vous devez utiliser une fonction de hachage pour crypter et stocker le mot de passe afin de protéger la sécurité du mot de passe utilisateur.
Exemple de code :
$password = $_POST['password']; $hashedPassword = password_hash($password, PASSWORD_DEFAULT); // 存储 $hashedPassword 到数据库
2.2. Exigences en matière de force du mot de passe
Définissez les exigences en matière de force du mot de passe, telles que la longueur du mot de passe, sa complexité, etc., pour rappeler aux utilisateurs de définir des mots de passe sécurisés.
Exemple de code :
$password = $_POST['password']; if(strlen($password) < 8){ die("密码长度至少为8位"); }
La fonction de téléchargement de fichiers est l'une des fonctions courantes sur les sites Web, mais elle constitue également un risque potentiel pour la sécurité. Voici quelques mesures de sécurité courantes.
3.1. Vérification du type de fichier
Vérifiez la légalité du fichier en vérifiant l'extension du fichier ou le type MIME pour éviter le téléchargement de certains fichiers malveillants.
Exemple de code :
$file = $_FILES['file']; $allowedExtensions = ['jpg', 'png', 'gif']; $allowedMimeTypes = ['image/jpeg', 'image/png', 'image/gif']; if(!in_array(pathinfo($file['name'], PATHINFO_EXTENSION), $allowedExtensions) || !in_array($file['type'], $allowedMimeTypes)){ die("不允许上传该类型的文件"); }
3.2. Sécurité du chemin de stockage des fichiers
Assurez-vous que le chemin où le fichier est stocké après le téléchargement est sûr pour éviter les problèmes de sécurité causés par une fuite de chemin de fichier.
Exemple de code :
$savePath = '/path/to/save'; $filename = uniqid().'.jpg'; // 使用唯一的文件名 move_uploaded_file($_FILES['file']['tmp_name'], $savePath.'/'.$filename);
L'attaque par injection SQL est l'une des méthodes d'attaque courantes. Voici quelques mesures courantes pour empêcher l'injection SQL.
4.1. Utiliser des instructions préparées
Utilisez des instructions préparées pour lier des paramètres afin d'empêcher les attaques par injection SQL.
Exemple de code :
$username = $_POST['username']; $password = $_POST['password']; $stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password"); $stmt->execute([':username' => $username, ':password' => $password]);
4.2. Utiliser des requêtes paramétrées
Utilisez des requêtes paramétrées pour transmettre les entrées de l'utilisateur en tant que paramètres à l'instruction de requête de base de données afin d'empêcher les attaques par injection SQL.
Exemple de code :
$username = $_POST['username']; $password = $_POST['password']; $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ? AND password = ?"); $stmt->execute([$username, $password]);
En résumé, grâce à une série de mesures de protection de sécurité telles que la vérification des entrées de l'utilisateur, la sécurité des mots de passe, la sécurité du téléchargement de fichiers et la prévention des attaques par injection SQL, la sécurité du site Web peut être considérablement améliorée et le risque d'être attaqué par des pirates peut être considérablement amélioré. Pendant le processus de développement, il est nécessaire d’accorder plus d’attention à ces aspects afin de protéger la sécurité des informations du site Web et 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!