Tout le monde sait que PHP est actuellement le langage de programmation d'applications Web le plus populaire. Mais comme d’autres langages de script, PHP présente également plusieurs failles de sécurité dangereuses. Dans ce didacticiel, nous examinerons donc quelques conseils pratiques pour vous aider à éviter certains problèmes de sécurité PHP courants.
Astuce 1 : Utilisez les rapports d'erreurs appropriés
Généralement pendant le processus de développement, de nombreux programmeurs oublient toujours de créer des rapports d'erreurs de programme, ce qui est une erreur extrêmement grave, car un rapport d'erreurs approprié est non seulement le meilleur outil de débogage, mais également un excellent outil de détection des vulnérabilités de sécurité, qui vous permet de trouver autant de problèmes que possible avant de mettre réellement l'application en ligne.
Bien sûr, il existe de nombreuses façons d'activer le rapport d'erreurs. Par exemple, dans le fichier de configuration php.in , vous pouvez définir l'activation du
démarrer le rapport d'erreurs au moment de l'exécution
error_reporting(E_ALL );
Désactiver le rapport d'erreurs
error_reporting(0);
Astuce 2 : ne pas utiliser l'attribut Weak de PHP
Plusieurs propriétés PHP doivent être définies sur OFF. Généralement, ils existent en PHP4, mais leur utilisation est déconseillée en PHP5. Surtout en PHP6, ces attributs ont été supprimés.
Enregistrer les variables globales
Lorsque register_globals est défini sur ON, cela équivaut à définir Environment, GET, POST, COOKIE ou les Les variables du serveur sont toutes définies comme des variables globales. Pour le moment, vous n'avez pas besoin d'écrire $_POST['username'] pour obtenir la variable de formulaire 'username'. Vous avez seulement besoin de '$username' pour obtenir cette variable.
Alors vous devez penser que puisque définir Register_globals sur ON présente des avantages si pratiques, pourquoi ne pas l'utiliser ? Parce que si vous faites cela, cela entraînera de nombreux problèmes de sécurité et cela pourrait également entrer en conflit avec les noms de variables locales.
Par exemple, jetez un œil au code suivant :
if( !empty( $_POST[‘username'] ) && $_POST[‘username'] == ‘test123′ && !empty( $_POST[‘password'] ) && $_POST[‘password'] == “pass123″ ) { $access = true; }
Si register_globals est défini sur ON lors de l'exécution, l'utilisateur n'a qu'à transmettre access=1 dans une chaîne de requête pour obtenir le script PHP Exécutez-en n'importe quoi.
Désactivez les variables globales dans .htaccess
php_flag register_globals 0
Désactivez les variables globales dans php.ini
register_globals = Off
Désactivez les magic_quotes_gpc similaires, magic_quotes_runtime , magic_quotes_sybase Ces citations magiques
sont définis dans le fichier .htaccess
php_flag magic_quotes_gpc 0 php_flag magic_quotes_runtime 0
sont définis dans php.ini
magic_quotes_gpc = Off magic_quotes_runtime = Off magic_quotes_sybase = Off
Astuce 3 : Validez la saisie de l'utilisateur
Bien sûr, vous pouvez également valider la saisie de l'utilisateur. Vous devez d'abord connaître le type de données que vous attendez de l'utilisateur. De cette façon, vous pouvez être prêt, du côté du navigateur, à empêcher les utilisateurs de lancer des attaques malveillantes contre vous.
Astuce 4 : évitez les attaques de scripts intersites par les utilisateurs
Dans les applications Web, il est simple d'accepter les saisies des utilisateurs dans le formulaire, puis de commenter les résultats. Lors de l'acceptation d'une saisie utilisateur, il serait très dangereux d'autoriser la saisie au format HTML, car cela permettrait également à JavaScript de s'immiscer de manière imprévisible et de s'exécuter directement. Même s'il n'existe qu'une seule de ces vulnérabilités, les données des cookies peuvent être volées et le compte de l'utilisateur peut être volé.
Astuce 5 : Empêchez les attaques par injection SQL
PHP ne fournit fondamentalement aucun outil pour protéger votre base de données, donc lorsque vous vous connectez à la base de données , Vous pouvez utiliser la fonction mysqli_real_escape_string suivante.
$username = mysqli_real_escape_string( $GET[‘username'] ); mysql_query( “SELECT * FROM tbl_employee WHERE username = '”.$username.“‘”);
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!