Question en sécurité en php
abdo_makhchoni
Messages postés
2
Statut
Membre
-
Groarh Messages postés 706 Statut Membre -
Groarh Messages postés 706 Statut Membre -
Bonjour,
je suis en train de programmer un script avec php et j'ai une question sur les facons de proteger le script , et aussi j'ai lu qu'on peux utiliser "ruby" avec le php pour donner plus de sécurité ...
je veux savoir tous ce qui concerne ce sujet là
merci d'avance.
je suis en train de programmer un script avec php et j'ai une question sur les facons de proteger le script , et aussi j'ai lu qu'on peux utiliser "ruby" avec le php pour donner plus de sécurité ...
je veux savoir tous ce qui concerne ce sujet là
merci d'avance.
A voir également:
- Question en sécurité en php
- Question de sécurité - Guide
- Votre appareil ne dispose pas des correctifs de qualité et de sécurité importants - Guide
- Mode securite - Guide
- Easy php - Télécharger - Divers Web & Internet
- Clé de sécurité windows 10 gratuit - Guide
3 réponses
Salut !
Il y a plusieurs niveaux sur lesquels s'intéresser à la sécurité d'un site.
1/ Niveau HTML : les attaques XSS. Si ton site propose un chat, un blog, ou n'importe quel système dans lequel le visiteur peut écrire quelque chose qui soit visible par les autres, il faut éviter au maximum l'introduction de code HTML (en particulier les balises script, embed et object). Il s'agit ici de protéger les visiteurs.
2/ Niveau SQL : les injections. Selon la façon dont ton serveur communique avec ta base de données, un visiteur mal intentionné peut remplir un champ de formulaire avec du code qui dénature le comportement de ta requête SQL. Par exemple, du texte qui contient ' -- (apostrophe et deux tirets). L'apostrophe marque la fin de la requête, et les deux tirets transforment le reste de la requête en commentaire, ce qui peut avoir des conséquences dramatiques (annuler une clause WHERE).
Cela dit, les serveurs sont souvent configurés pour échapper les apostrophes dans les requêtes, mais il faut vérifier.
3/ Autres attaques… Un pirate vraiment déterminé peut user de divers moyens pour s'introduire dans ton serveur, ou le rendre inopérant, etc. Mais c'est rare et ça demande beaucoup de connaissances.
En ce qui concerne Ruby, je n'ai jamais entendu parler d'un « mélange » avec PHP. Peux-tu me dire où tu as lu ce dont tu parles ? Je pense juste que Ruby est, selon l'opinion générale, plus sûr que PHP. (je ne dis pas que c'est faux !)
Il y a plusieurs niveaux sur lesquels s'intéresser à la sécurité d'un site.
1/ Niveau HTML : les attaques XSS. Si ton site propose un chat, un blog, ou n'importe quel système dans lequel le visiteur peut écrire quelque chose qui soit visible par les autres, il faut éviter au maximum l'introduction de code HTML (en particulier les balises script, embed et object). Il s'agit ici de protéger les visiteurs.
2/ Niveau SQL : les injections. Selon la façon dont ton serveur communique avec ta base de données, un visiteur mal intentionné peut remplir un champ de formulaire avec du code qui dénature le comportement de ta requête SQL. Par exemple, du texte qui contient ' -- (apostrophe et deux tirets). L'apostrophe marque la fin de la requête, et les deux tirets transforment le reste de la requête en commentaire, ce qui peut avoir des conséquences dramatiques (annuler une clause WHERE).
Cela dit, les serveurs sont souvent configurés pour échapper les apostrophes dans les requêtes, mais il faut vérifier.
3/ Autres attaques… Un pirate vraiment déterminé peut user de divers moyens pour s'introduire dans ton serveur, ou le rendre inopérant, etc. Mais c'est rare et ça demande beaucoup de connaissances.
En ce qui concerne Ruby, je n'ai jamais entendu parler d'un « mélange » avec PHP. Peux-tu me dire où tu as lu ce dont tu parles ? Je pense juste que Ruby est, selon l'opinion générale, plus sûr que PHP. (je ne dis pas que c'est faux !)
merci frere . merci pour les info mais est que tu peux me donne de function eficace pour protege le script
et pour ruby j'ai lu ca dans un comment sur un forum en arabe .
et pour ruby j'ai lu ca dans un comment sur un forum en arabe .
Ouaip, je vais te renvoyer sur la doc.
Il y a diverses fonctions pourneutraliser le HTML :
- strip_tags est la plus brutale : elle supprime tout ce qui ressemble à du HTML dans la chaîne paramètre (tout ce qui est entre <>), sauf les balises que tu autorises explicitement.
- htmlspecialchars transforme simplement les caractères <, >, ' et ", en leurs entités correspondantes, ce qui permet d'afficher le HTML comme du texte (dans un tuto par exemple). Elle a une fonction inverse htmlspecialchars_decode pour faire la transformation dans l'autre sens.
- htmlentities fonctionne comme htmlspecialchars, sauf qu'elle transforme tous les symboles qui correspondent à une entité HTML. Son inverse est html_entity_decode.
- addslashes ajoute des slashes ( / ) pour neutraliser les apostrophes ( ' ) afin d'éviter les injections SQL. Mais si ton serveur le fait automatiquement, ne l'utilise pas, sinon il y aurait des slashes en trop.
Pour bien gérer la sécurité de son site, l'idée générale est de contrôler systématiquement toutes les entrées de formulaire avant toute autre chose, que ce soit affichage, stockage ou utilisation directe. Ça peut se faire avec les fonctions ci-dessus, ou, dans certains cas, plus simplement, par exemple quand tu sais quel type de donnée tu dois récupérer.
Par exemple, j'ai un champ "numero" formulaire de méthode GET :
Je veux récupérer un nombre, je fais donc simplement :
Le cast va tenter de convertir la donnée (qui est une chaîne, comme tout ce qui vient d'un formulaire) en entier ; si l'utilisateur a bien rentré un nombre, la valeur est la même. Il faut donc tester :
Pour finir je te confie ma petite magouille perso pour les boutons radio et les checkbox : pour ces deux types de bouton, leur valeur est 'checked' si ils sont cochés, ou une chaîne vide sinon. Dans ma database, qui est mySQL, je les stocke sous la forme BOOL qui est en fait un TINY INT acceptant 0 ou 1.
Donc je convertis ma valeur en booléen puis en nombre.
Voilà, bon courage !
;)
Il y a diverses fonctions pourneutraliser le HTML :
- strip_tags est la plus brutale : elle supprime tout ce qui ressemble à du HTML dans la chaîne paramètre (tout ce qui est entre <>), sauf les balises que tu autorises explicitement.
- htmlspecialchars transforme simplement les caractères <, >, ' et ", en leurs entités correspondantes, ce qui permet d'afficher le HTML comme du texte (dans un tuto par exemple). Elle a une fonction inverse htmlspecialchars_decode pour faire la transformation dans l'autre sens.
- htmlentities fonctionne comme htmlspecialchars, sauf qu'elle transforme tous les symboles qui correspondent à une entité HTML. Son inverse est html_entity_decode.
- addslashes ajoute des slashes ( / ) pour neutraliser les apostrophes ( ' ) afin d'éviter les injections SQL. Mais si ton serveur le fait automatiquement, ne l'utilise pas, sinon il y aurait des slashes en trop.
Pour bien gérer la sécurité de son site, l'idée générale est de contrôler systématiquement toutes les entrées de formulaire avant toute autre chose, que ce soit affichage, stockage ou utilisation directe. Ça peut se faire avec les fonctions ci-dessus, ou, dans certains cas, plus simplement, par exemple quand tu sais quel type de donnée tu dois récupérer.
Par exemple, j'ai un champ "numero" formulaire de méthode GET :
<input type="text" name="numero" />
Je veux récupérer un nombre, je fais donc simplement :
<?php $numero = (int) $_GET['numero']; ?>
Le cast va tenter de convertir la donnée (qui est une chaîne, comme tout ce qui vient d'un formulaire) en entier ; si l'utilisateur a bien rentré un nombre, la valeur est la même. Il faut donc tester :
<?php
if ($numero != $_GET['numero']) {
echo "Vous n'avez pas rentré un nombre…";
}
?>
Pour finir je te confie ma petite magouille perso pour les boutons radio et les checkbox : pour ces deux types de bouton, leur valeur est 'checked' si ils sont cochés, ou une chaîne vide sinon. Dans ma database, qui est mySQL, je les stocke sous la forme BOOL qui est en fait un TINY INT acceptant 0 ou 1.
Donc je convertis ma valeur en booléen puis en nombre.
<?php // 'checked' --> true --> 1 // '' --> false --> 0 $bouton = (int)(bool) $_GET['bouton']; ?>
Voilà, bon courage !
;)