|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
![]() ![]() Développeur PHP & Architecte logiciel Inscription : mars 2003 Messages : 563 ![]() |
Bonjour tout le monde,
j'essaye de faire une fonction pour protéger les injections lors d'une saisie formulaire, mais je galère un peu, je commence à me perdre J'ai grisé les lignes qui selon moi étaient des doublons, mais je ne suis sûr de rien J'ai fait beaucoup de copier-coller, des tutos de sécurité de developpez, et aussi de la doc PHP, donc fouillis : Code :
résultat : Code :
echo str_protege('mot1<mot2mot3<? echo "jjj"; ?>mot4?mot5"mot6\'mot7');
Code :
echo str_protege('mot1?mot2mot3<? echo "jjj"; ?>mot4?mot5"mot6\'mot7');
Dans le cas 2, la chaine s'arrête au < . Est-elle tronquée ou bien le code derrière est-il lu et executé? Dans le cas 2, même question pour "<? echo "jjj"; ?> ? Pfiouuu ! Dur ! Merci d'avance pour votre aide
__________________
Zend PHP Certified Engineer tutoriels : tutos PHP, Web & SEO blog : blog.lepine.pro membre de l'AFUP (Association des Utilisateurs de PHP) |
||
|
00
|
|
|
#2 |
![]() ![]() Inscription : août 2006 Messages : 1 208 ![]() |
Et si tu te contentais d'écrire un truc du genre :
?
__________________
Rakken Oneira, un monde imaginaire d'Heroic Fantasy. Parce que la présomption d'innocence est un des fondements de notre pays et qu'elle doit le rester, dans tous les domaines : http://www.laquadrature.net/ |
|
00
|
|
|
#3 |
![]() ![]() Développeur PHP & Architecte logiciel Inscription : mars 2003 Messages : 563 ![]() |
il me manquerait la protection de la base de données + la protection contre les scripts javascript + le choix de remplacer / supprimer les balises contrôlées.
J'étais parti là-dessus au départ mais ça m'a paru trop faible.
__________________
Zend PHP Certified Engineer tutoriels : tutos PHP, Web & SEO blog : blog.lepine.pro membre de l'AFUP (Association des Utilisateurs de PHP) |
|
00
|
|
|
#4 |
|
Futur Membre du Club
![]() Inscription : janvier 2007 Messages : 42 ![]() |
il y a une fonction qui pourrait te permettre de faire ce que tu veux :
strip_tags — Supprime les balises HTML et PHP d'une chaîne: string strip_tags ( string $str [, string $allowable_tags ] ) Pour la base de données il ne te reste plus qu'à utiliser des requêtes préparés Aprés il te reste le javascript à supprimer dans les balises autorisés. |
|
|
00
|
|
|
#5 |
![]() ![]() Développeur PHP & Architecte logiciel Inscription : mars 2003 Messages : 563 ![]() |
elle est déjà dans le code plus haut
merci de votre aide. Ce qu'il me manque ce n'est pas tant les fonctions qu'une bonne compréhension de leurs effets. Et savoir ce que devient le "<?php echo "jjj"; ?> du code m'aiderait beaucoup je pense, enfin j'espère
__________________
Zend PHP Certified Engineer tutoriels : tutos PHP, Web & SEO blog : blog.lepine.pro membre de l'AFUP (Association des Utilisateurs de PHP) |
|
00
|
|
|
#6 | ||||
|
Membre Expert
![]() |
Code php :
correction: Code php :
Bon... je continue de lire le code plus loin... ^^ EDIT : Pour le reste, je pense qu'une bonne utilisation de strip_tags() & htmlspecialchars() devrait suffire et alléger ton code |
||||
|
|
00
|
|
|
#7 | ||
![]() ![]() Inscription : août 2006 Messages : 1 208 ![]() |
Citation:
Citation:
En fait, ca te transforme tout les caractères un peu vicieux (genre < > ' " é è et autres joyeusetée) en truc du genre < > ... Donc c'est protégé, et plutot bien en fait. L'avantage, c'est également que si le gars écrit "<coucou>", eh bien a l'écran, on verra bien s'afficher "<coucou>", mais en base, ce qui est stocké est "<coucou>" ce qui est tout a fait sur. Les <? ou <script></script> ne sont donc jamais interprété, puisque le caractère "<" n'arrive jamais en base, il est traduit avant. Et il n'arrive jamais a la page html, c'est < qui est affiché.
__________________
Rakken Oneira, un monde imaginaire d'Heroic Fantasy. Parce que la présomption d'innocence est un des fondements de notre pays et qu'elle doit le rester, dans tous les domaines : http://www.laquadrature.net/ |
||
|
00
|
|
|
#8 |
|
Membre expérimenté
![]() Inscription : octobre 2006 Messages : 572 ![]() |
Salut
Tu peux ajouter la fonction mysql_real_escape_string($variable) pour ta base. C'est généralement performant
__________________
GAMIN !!!! ![]() _______________________________________________ PHP 5.2 | Apache 2 | MySQL 5 | WinXP Pro | Mac OSX |
|
|
00
|
|
|
#9 |
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Utiliser PDO (ou une autre abstraction) qui permet (souvent) d'utiliser des paramètres incluant des fonctions de protection contre l'injection SQL. Idéal pour les fainéants...
|
|
|
00
|
|
|
#10 | |
|
Membre expérimenté
![]() Inscription : octobre 2006 Messages : 572 ![]() |
Citation:
Pourquoi ré-inventer la roue ? ![]() PDO fait déjà tout cela !
__________________
GAMIN !!!! ![]() _______________________________________________ PHP 5.2 | Apache 2 | MySQL 5 | WinXP Pro | Mac OSX |
|
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 238 ![]() |
J'y vois 2 raisons :
* Ma roue c'est ma roue, pas la roue de quelqu'un d'autre ! (Tu ne convoitera pas la roue de ton voisin) * La roue du voisin c'est une roue de tracteur, avec rainures profondes de 5cm alors que moi je veux juste une roue de trottinette ;o)
__________________
PHP : Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production) Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error()); Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable. Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/ |
|
|
00
|
|
|
#12 | |
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Citation:
* Quand on est dans le caca, même avec de l'élan, c'est pas facile de s'en sortir en trottinette... Plus sérieusement, j'entends tes arguments, mais ils ne s'appliquent que dans très peu de cas : grosses applis propriétaires avec des specs techniques particulières et de gros besoin d'optimisation. Mais dans la plupart des cas rencontrés ici, à savoir des sites webs souvent petits, c'est pas utile de fabriquer ta trottinette à réaction, non ? |
|
|
|
00
|
|
|
#13 |
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 238 ![]() |
Bon, j'ai pas donné tout mes arguments, mais si tu veux que je sois sérieux je peux ^^
Exemple concret : Pourquoi est-ce que je n'aime pas phpbb et que je ne l'installerais jamais sur mon site ? * Des failles sont trouvées de temps en temps, parce que le code est libre et parce qu'il évolue. Choses bonnes en soi mais au niveau sécurité c'est une plaie * Même si beaucoup de choses ont été faites dans les dernières versions sur les perfs, ca reste une usine a gaz. * La customisation ne remplace pas une vraie interface ad hoc totalement différente Sinon on peux aussi dire que : * Si personne ne cherche a recoder ce qui existe, dans 10 ans plus personne ne saura le coder... * Coder dans une optique de sécurité permet de se poser les bonnes questions (est-ce que cette variable est filtrée ? un cookie est il sur ? un utilisateur malveillant peut il modifier cette donnée ? etc...) et d'apprendre... a développer un code plus sécurisé, ou a corriger un code existant ou il reste une faille. * Personnellement, je n'ai pas confiance en mon garagiste... alors que je le vois... alors l'ingénieur de michelin que j'ai jamais vu... Pour certaines choses je n'ai pas le choix. Mais quand je l'ai, je préfère me fier a ce que je fais. Je posterais ici ce soir (si j'y pense ^^) une classe que j'ai développée et qui gère toutes les variables (GET/POST/SESSION/FILE) et toutes leurs utilisations (HTML, SQL, donnée "brute")
__________________
PHP : Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production) Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error()); Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable. Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/ |
|
|
00
|
|
|
#14 |
![]() ![]() Inscription : août 2006 Messages : 1 208 ![]() |
Et puis après, les roues des autres ne sont pas forcement tout a fait ronde. J'ai vu cité PDO juste au dessus par exemple.
Quelqu'un a déjà essayé d'utiliser pdo avec oracle ? Personnellement, ca a été la seule fois de ma vie ou j'ai réussi à faire un "segmentation fault" (erreur bien connue des codeurs en C) en php. Et si on veut utiliser des CLOB, alors là, c'est le drame absolu... Mais voila, l'appli de base était faite pour mysql, alors le choix de pdo mysql a été tout a fait interessant, avec l'optique "et en plus, ca va marcher tout seul sous oracle, ou presque). Un truc maison, on aurait pu l'adapter là... ben il a fallut faire avec, et les clob sont devenu des blobs, avec toutes les stupidités d'implémentation que ca entraine... Vive les roues de tracteur quand on veut rouler sur une piste cyclable...
__________________
Rakken Oneira, un monde imaginaire d'Heroic Fantasy. Parce que la présomption d'innocence est un des fondements de notre pays et qu'elle doit le rester, dans tous les domaines : http://www.laquadrature.net/ |
|
00
|
|
|
#15 | |
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Citation:
|
|
|
|
00
|
|
|
#16 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 238 ![]() |
Comme prévu, voila une p'tite classe que j'ai fait y a quelques mois.
Il y a quelques restrictions toutefois : * développée pour php 5 * ne transforme que les variables venant d'un tableau super global, donc pas une variable locale qu'on aurait définie dans le script... faudrait la modifier un peu pour ca ;o) Le code est assez gros mais il doit y avoir 50% de commentaires Code :
__________________
PHP : Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production) Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error()); Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable. Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/ |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com