Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Site Web > PHP > Optimisation & Sécurité > Le danger des failles XSS > Lecture des commentaires

Le danger des failles XSS

Vous devez être inscrit pour pouvoir poster des messages

Page : 1 
Pseudo Commentaire
Page : 1 
Hors ligne tryks # Posté le 10/04/2008 à 09:43:10 - Ce membre a mis la note : 16
Vis tibi adsit !
Groupe : Membres
Pas mal.
En revanche, petite faute à la fin: tu ouvres mal ta puce :)
16
 
Hors ligne Jérémy_B # Posté le 15/04/2008 à 17:59:50 - Ce membre n'a pas mis de note
Pensez avenir..
Avatar
Groupe : Membres
Bonjour ,

Voilà un tuto qui explique un peu mieux ce type de faille !

Par contre, est-il mieux d'utiliser " htmlentities " ou " htmlspecialchars " ? Les recommendations sur le forum sont bien plus nombreuses pour htmlspecialchars ! De plus, tu parles que pour les chaines de caractères... il faut aussi vérifier les valeurs numériques, grâce à " intval ", entre autre ! Ainsi, si la valeur attendu est un nombre, on place cette fonction pour éviter tout problème !

Mais cela reste quand même un bon tuto dans l'ensemble. ^^

PHP | MySQL | POO

Mes compétences :
(Avancé) PHP, MySQL, xHTML, CSS | (Intermédiaire) POO, MVC | (Novice) Inkscape


 
Hors ligne Savageman # Posté le 28/04/2008 à 13:44:21 - Ce membre n'a pas mis de note
Insa : If inside
Avatar
Groupe : Membres
C'est bien évidemment htmlspecialchars() qui faut utiliser et non pas htmlentities() : on s'en contre-fiche des accents, c'est tout juste bon pour ceux qui n'arrivent pas utiliser le bon encodage...

Image utilisateur
Image utilisateur
 
Hors ligne funnycat # Posté le 28/04/2008 à 15:43:49 - Ce membre a mis la note : 15
Illusion tu nous trahis
Avatar
Groupe : Membres
Merci pour ce tutoriel bien expliqué et qui souligne bien les dangers que représente ce type de faille.

InfoWebMaster: Site pour webmasters (articles, informations et ressources pour webmasters).
Elektronique: Site d'électronique (cours et montages d'électronique).
  • Mes connaissances : XHTML/CSS, PHP, Référencement
  • Mes notions : Javascript, C/C++, XML
 
Hors ligne Valter # Posté le 28/04/2008 à 17:35:31 - Ce membre a mis la note : 10
http://skyzzor.blogspot.com/
Groupe : Membres
Bonjour, alors je t'ai mis un gentil 10 car je n'ai pas voulu trop te décourager puisque apparemment, il s'agit de ton premier tutoriel.

Selon moi, tu ne connais pas assez la faille XSS pour pouvoir en faire un cours ou même un article, ceci dit je ne cherche pas à te faire renoncer, simplement qu'il faudrait te documenter un peu plus sur cette faille ou alors donner à ton tutoriel un nom un peu moins explicite.

Je ne t'en dirais pas plus...
Hors ligne Pio154 # Posté le 28/04/2008 à 17:40:05 - Ce membre a mis la note : 13
prendre du temps pour coder
Avatar
Groupe : Membres
Je met 13/20 mais il faut approfondir ;) Sinon pour le question, la première question je n'ai pas compris, même avec la réponse.

Mon blog : cliquez ici !
:) :D ;) :p :lol: :euh: :( :o :colere2: o_O ^^ :-°
:ange: :colere: :diable: :magicien: :ninja: >_< :pirate: :'( :honte: :soleil: :waw: :zorro:
 
Hors ligne Ninety # Posté le 28/04/2008 à 17:48:35 - Ce membre a mis la note : 16
Voila qui me decrit mieux :p
Avatar
Groupe : Membres
Citation : Aj4x
C'est sûr... Mais imaginons qu'au lieu de mettre "Hello world !", nous mettions file.php?texte=<script>alert('XSS')</script>...

...

Et le code source :

Code : HTML
1
<script>alert('rien')</script>


C'est pas plutot alert('XSS') ?


Sinon, comme l'a dit Jérémy_B il faudrai que tu parle de la fonction intval (). Concernant la fonction htmlspecialchars () et htmlentities () elles sont identiques sauf qu'avec htmlentities () tous les caractères qui ont des équivalents en entités HTML sont effectivement traduits (selon la doc).

Personnellement j'utilise htmlentites ($var, ENT_QUOTES) ...


Concernant le tuto, c'est une bonne approche meme s'il pourrait etre un peu plus detaillé et le code un peu mieux indenté :D .
Ma note : 16.

Image utilisateur
 
Hors ligne cypher666 # Posté le 28/04/2008 à 18:17:50 - Ce membre n'a pas mis de note
Heu....
Avatar
Groupe : Membres
Je note 16/20 aussi car il manque quelques informations. :)

Je pense qu'une liste non exhaustive de fonctions de sécurité ne serais pas de trop.
Juste les plus importantes ^^

Voila, bonne améliorations ;)


Quand vous allez sur un site amateur, cliquez sur les publicités, ça rapporte de l'argent au webmaster et vous ça ne vous coûte rien :)
Image utilisateur



 
Hors ligne MicBeastKiller # Posté le 29/04/2008 à 08:58:54 - Ce membre n'a pas mis de note
Groupe : Membres
Bonjour,
Je n'y connais rien donc je ne note pas. Je l'ai juste lu pour info...
Petite faute en deuxième partie Certains des risques provoqués par une faille XSS
dans le premier exemple récupère le mot de passe que vous tapé...
tapez et non tapé
Bonne continuation
Hors ligne Aztek # Posté le 29/04/2008 à 12:40:19 - Ce membre a mis la note : 15
blablabla
Avatar
Groupe : Membres
Et dans ton QCM pourquoi et-ce dangereux USER-AGENT ? à part pour vouloir se hacker soi-même ?

Les chats retombent-ils toujours sur leur pattes ? Selon l'association américaine des vétérinaires : sur 22 chats tombés d'une hauteur supérieure à 7 étages (environ 25m), un seul est mort sur le coup, 20 ont été blessés par leur chute (principalement à l'abdomen), dont 1/3 de lésions graves et 1/3 de lésions sérieuses... (Quid 1991. page 209b)
\mathfrak{Vive \ la \ France \ !}
 
Hors ligne mrjay42 # Posté le 29/04/2008 à 13:48:15 - Ce membre n'a pas mis de note
We gotta take the power back
Avatar
Groupe : Membres
<?php if($recherche = $_GET['search'])?> C'est normal ça?
Pourquoi n'y a t'il qu'un seul "=" dans le if ?

Je précise que ce bout de code est extrait du QCM...

Un ptit blog ou je stocke mes solutions concernant linux, windows, php, html, css, js et aussi le hardware :
http://mrjay42.free.fr/blog

_If you type "google" into google, you can break the internet! I swear! Don't do this.
_L'homme est un loup level 54 pour l'homme
 
Hors ligne Jeremie78 # Posté le 29/04/2008 à 19:26:17 - Ce membre n'a pas mis de note
Powered by GNU/Linux
Groupe : Membres
Je ne suis pas d'accord avec la première question du questionnaire : ce script n'est PAS faillible.
Disons que si on parle de faille XSS pur et simple, oui il y en a une, mais il faudrait plutôt se demander si il y a un risque pour les AUTRES VISITEURS.

Dans ton exemple, le modification du USER-AGENT permet d'infiltrer du javasccript, mais comme ce code javascript n'est affiché qu'à celui qui a ce USER-AGENT là, alors le "pirate" se pirate lui-même ...

Il faut donc tempérer tes propos quand tu parles de "faillibilité du script". J'estime qu'un script n'est RÉELLEMENT faillible que s'il introduit un risque de sécurité pour les AUTRES visiteurs du site.

Dans ton exemple, il s'agit plus d'un bug qu'autre chose ;) . Le bug étant que si des balises se trouvent dans le USER-AGENT, la page pourrait se retrouver défigurer.


EDIT : D'ailleurs, je me demande comment tu peux pondre un code de ce genre :
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
if($version == "7.0"){
        ?>
        <script>
        <!--
        Votre client <?php echo $client ; ?> n'est plus à jour.
        -->
        </script>
        <?php
        }
?>

À quoi servent les balises <script> entourant le texte ?? La seule chose que tu risque de faire est de faire bugger l'interpréteur de JS du navigateur.
À mon avis, tu voulais soit mettre ce code :
Code : PHP
1
2
3
4
5
6
7
<?php
if($version == "7.0"){
        ?>
        Votre client <?php echo $client ; ?> n'est plus à jour.
        <?php
        }
?>

Soit celui-là :
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
if($version == "7.0"){
        ?>
        <script>
        <!--
        alert('Votre client <?php echo $client ; ?> n\'est plus à jour.');
        -->
        </script>
        <?php
        }
?>


EDIT 2 : mrjay42 > le code n'est pas vraiment exemple, il suffit de regarder la qualité de l'indentation. Prend en compte le résultat définitif de code et pas les bizarreries du code.
Dans le cas de cette ligne, il faut comprendre que le variable de gauche prend la valeur de la variable de droite. Mais bon, c'est vraiment pas un "bon" code, il n'y a pas de vérification sur l'existence de la variable "$_GET['search']" et faire cette assignation dans une condition n'a tout simplement aucun sens, à part mettre en exergue la médiocrité du code. (une code faillible peut être bien écrit, pas besoin de faire des trucs illogiques).

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne Aztek # Posté le 29/04/2008 à 20:55:30 - Ce membre a mis la note : 15
blablabla
Avatar
Groupe : Membres
@Jeremie78 -> C'est ce que je disais :-°

Les chats retombent-ils toujours sur leur pattes ? Selon l'association américaine des vétérinaires : sur 22 chats tombés d'une hauteur supérieure à 7 étages (environ 25m), un seul est mort sur le coup, 20 ont été blessés par leur chute (principalement à l'abdomen), dont 1/3 de lésions graves et 1/3 de lésions sérieuses... (Quid 1991. page 209b)
\mathfrak{Vive \ la \ France \ !}
 
Hors ligne Jeremie78 # Posté le 29/04/2008 à 21:04:05 - Ce membre n'a pas mis de note
Powered by GNU/Linux
Groupe : Membres
En effet, mis je donne plus de précisions ^^

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne Otnip # Posté le 29/04/2008 à 22:41:27 - Ce membre n'a pas mis de note
Groupe : Membres
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
//Recherche
if($recherche = $_GET['search']){
        echo "<html><head><title>".$recherche." : Recherche</title>";
        echo "</head><body><pre>";
        $array = array("1er résultat","2eme résultat","3ème résultat");
        print_r($array);
        echo " pour " . htmlentities($_GET['search']);
        echo "</body></html>";
        }
?>


Je trouve un brin que $recherche == $_GET['search'] serait plus approprié.

Nous sommes libres de ne pas nuire aux autres.
 
Hors ligne coucou747 # Posté le 30/04/2008 à 07:57:27 - Ce membre a mis la note : 2
Avatar
Groupe : Membres
Ce tuto est vraiment incomplet, il ne traite pas vraiment des exploits faits en javascripts tels que faire auto-valider un formulaire du site (si un admin vennait sur une page ayant ete exploitee, il pourrait alors supprimer involontairement un membre) ou mettre une image genre : http://admin.site.fr/delete_membre.php?id=42 comme image d'avatar pour supprimer automatiquement un membre des qu'un admin irait sur la page (il ne s'en rendrait alors meme pas compte...)
ou les injections SQL a base de UNION SELECT ou autre

sans compter les uploads et les includes a base de http://www.monsite/monscript

Bref, c'est VRAIMENT incomplet.
Hors ligne katagoto # Posté le 30/04/2008 à 16:55:11 - Ce membre a mis la note : 5
Hard than a rock
Avatar
Groupe : Membres
Génial ça c'est de la sécurité à l'état pure :

Code : PHP
1
2
3
<?php
$texte = htmlentities($_GET['texte']);
?>


Ce ne suffit pas...

Code : PHP
1
2
3
<?php
$texte = htmlentities(addslashes($_GET['texte']));
?>


Si je t'avais dans ma team de codeurs j'aurais peur...

Bonne journée et bon code,
Katagoto
_______________________________________

Vive PHP, PostGreSQL, la POO, PDO, AC/DC et le C++ :p
Je cherche une aide en C++
 
Hors ligne Nelty # Posté le 30/04/2008 à 17:17:12 - Ce membre n'a pas mis de note
Python rocks.
Avatar
Groupe : Membres
katagoto : je n'aimerais pas être dans ta team de codeur, car tu as l'air extrêmement incompétent.

Sauf sauf sur certaines configurations de PHP (le mieux c'est de vérifier une fois et après on fait les scripts en conséquence), les ' et " sont échappés automatiquement. Si vous souhaitez activer/désactiver ça, il faut aller dans votre fichier PHP.ini et chercher "magic_quote".

Cet échappement est valable pour toutes les valeurs transmises par $_COOKIE, $_POST et $_GET. Tu comprendras donc qu'échapper des caractères (' et ") déjà échappés, c'est un peu beaucoup débile.

Image utilisateur






Python



À l'ouïe de ce mot, vous pouvez penser à deux choses. La première, c'est le serpent. La deuxième, c'est le langage de programmation. Étant donné que nous sommes sur un site basé autour de ce dernier domaine, je vais plutôt m'intéresser au langage. :p

Concrètement, Python c'est quoi ?



Python est comme je l'ai indiqué plus haut un langage de programmation interprété.
Il est placé sous une licence libre et est un langage dit «multi-plateforme» (il fonctionne sous Windows, Mac et Linux).
Comme beaucoup, il est à la base exploitable en console, mais l'utilisation de GUI est envisageable pour faire une application graphique.

Atouts



Un des gros avantages de Python est qu'il est très simple à l'écriture et vous permet d'adopter de bonnes méthodes de programmation, notamment au niveau de la lisibilité du code.
En effet, ici, plus d'accolades ou autres pour indiquer un bloc d'instruction (if, else, while, ...), tout se fait par indentation.
Ainsi, un tel code en PHP :
Code : PHP
1
2
3
4
5
6
<?php
for($i=1;$i<=3;$i++)
{
echo $i*2.' ';
}
?>

Donnera ceci en Python :
Code : Python
1
2
3
4
for i in xrange(1,4):
  print 2*i
# ou
[i*2 for i in [1,2,3]]


Les deux afficheront (à peu près) :
Citation : Résultat :

2,4,6


Remarquez la simplification du code pour effectuer une action très simple.

Il a aussi l'avantage d'intégrer de nombreuses bibliothèques pour effectuer une multitude d'actions très diverses, dans tous les domaines. math pour les opérations mathématiques par exemple.

Pour finir, il est aussi exploitable sur le Web. Pour l'utiliser, il vous faudra un hébergeur l'acceptant et peut-être inclure certaines bibliothèques selon vos besoins (je pense à CGI pour les traitements de formulaire). À titre d'information, alwaysdata accepte le Python et est gratuit.

Où apprendre ?



Question évidemment indispensable si vous êtes intéressés... La première, la plus évidente, c'est la documentation officielle de Python, malheureusement uniquement disponible en anglais.
Mais il existe un cours très réputé rédigé par un certain Gérard Swinnen qui est disponible en français.
S'il ne vous plaît pas, Google (ou autre moteur de recherche) est votre ami !

Où se faire aider ?



Peut-être une question qui ne vous viendra pas à l'esprit immédiatement, mais quand vous aurez un problème que vous ne saurez résoudre... Ne vous inquiétez pas, d'autres gens sont passés avant vous et sont prêts à vous aider !
Dans un premier temps, je vous conseille de passer sur IRC, channel #python, serveur irc.epiknet.org . Vous y trouverez un petit groupe de gens qui pourront peut-être vous aider.
Après, si vous n'avez pas résolu votre problème, il reste le forum « Autres langages » où des Pythoneux viennent de temps en temps.
Enfin, si votre problème est lié à l'utilisation d'une bibliothèque, n'oubliez pas d'aller consulter sa documentation (très souvent en anglais).
 
Hors ligne zerro # Posté le 30/04/2008 à 19:41:59 - Ce membre n'a pas mis de note
$ 10.000 $
Avatar
Groupe : Membres
C'est en même temps trop léger, et en même temps pas assez développé sur des choses qui arrivent comme ça sans accroche. Ce n’est pas assez développé sur ce qui doit l’être si on voudrait partir de zéro, ou pas assez poussé si l’on veut partir d’un niveau moyen. En d’autres termes, le public de ce tuto est très difficilement cadré !

Je ne place pas de note ni ne veux saquer le tuto, c’était juste une impression, les commentaires devraient permettre de faire évoluer tout ça. Bonne chance pour la suite, je repasserai sûrement +

^^

- D'un Z qui veut dire Zerro -
 
Hors ligne coucou747 # Posté le 01/05/2008 à 02:46:09 - Ce membre a mis la note : 2
Avatar
Groupe : Membres
svp, critiquez des codes et non des auteurs, ca permettra certainement une discution constructive plutot qu'un affrontement verbal.

katagoto si t'as un exemple de choses qui ne passe pas avec le htmlentities... poste le...

il se trouve que certaines versions de php etaient vulnerables a des caracteres chinois invalides
Hors ligne utb_diablo # Posté le 18/06/2008 à 20:09:37 - Ce membre n'a pas mis de note
-uTb#`diablo 4 ever ;)
Avatar
Groupe : Membres
Vous vous demandez le danger que peut représenter un User-Agent falsifié ?
Très simple !

Sur un site comme le Sdz où les navigateurs sont recensés,
imaginez une page ou serait affiché la liste de tout les navigateurs qu'utilisent les visiteurs,
pour un peu que les codeurs du Sdz soient des bras cassés, et n'aient pas pensé à protéger les User-agent enregistrés,
le compte du premier admin à visionner ces stats serait volé illico !

Pire : imaginez que ces stats soient rendus public (comme c'est le cas sur le Sdz),
un petit malin ayant falsifié son User-Agent volerait aussi facilement le compte de toutes les personnes
visionnant ces stats. Ce serait l'anarchie totale :)

Ne prenez pas les failles XSS à la légère, elles sont dangereuses ces petites bebetes :)

Never trust user input

Ils ne savaient pas que c'était impossible, alors ils l'ont fait ...

You'll find my software here => ftp://serv-diablo.no-ip.org/Source

Recherche offres de télétravail /Q me
 
Hors ligne Aj4x # Posté le 23/06/2008 à 09:37:51 - Ce membre n'a pas mis de note
Avatar
Groupe : Membres
Et bien, et bien, je n'étais pas aller voir les commentaires. Pour être honnête, après sa validation j'ai laissé le tuto à l'abandon, ce qui explique que les fautes ne soient pas corrigés.
Pour ce qui est du htmlentities() qu fait polémique, oui, vous pouvez choisir de l'utiliser, ou de préférer un htmlspecialchars, intval pour un nombre, etc ...
Ensuite, pour le fait que le tuto soit incomplet, deux choses :
- Si vous parlez, comme dans un commentaire, des failles autres que les XSS, c'est bien normal ( le commentaires site les CSRF et SQL Injection de mémoire )
- Il est quand même assez difficile de faire un long tuto sur ce sujet, surtout si l'on ne veut pas parler de l'exploitation de la faille ( auquel cas, on pourrait largement approfondir le sujet en abordant les XST, les tunnels & shells XSS, ... )

Je vois aussi que j'ai oublié de différencier 2 types de failles XSS : Celle qui ne sont accessible que par une URL, et celle qui sont réaffichées, car retenu dans la bdd ( les plus inquiétantes ).

Je repasserais de temps à autres pour lire un peu les commentaires, c'est promis :).
Cordialement,
Ajax
Hors ligne TheFirstZero # Posté le 06/08/2008 à 10:50:24 - Ce membre a mis la note : 15
Groupe : Membres
Très bonne initiative que de faire ce tuto, qui souligne comme d'autres l'ont dit la dangerosité des failles XSS. C'était quelque chose que je ne connaissais pas du tout auparavant. J'ignorais que l'on pouvait faire exécuter du code directement depuis l'URL. Il serait intéressant aussi de mettre à l'épreuve cette faille pour les variables en méthode POST.
Bonne continuation.

Florian.

^^
 
Hors ligne luc@s # Posté le 11/08/2008 à 12:48:16 - Ce membre a mis la note : 13
PPHP
Avatar
Groupe : Membres
@ katagoto
1-Addslashes ne protège pas contre les failles XSS :colere2:
2-Addslashes ne sert à rien, utilise au moins mysql_real_escape_string :colere2:
3-Je n'aimerai pas DU TOUT travailler avec toi non plus :colere2:

Le tuto est pas très complet, bof;
13/20

Code : PHP
1
2
3
4
5
<?php
if(!rtfm()) {
    exit();
}
?>
 
Hors ligne Miguel1991 # Posté le 24/08/2008 à 03:46:24 - Ce membre n'a pas mis de note
Avatar
Groupe : Membres
J'ai bien aimé ce tuto qui est plutôt bien expliqué,je trouve mais je ne suis pas assez expérimenté pour savoir s'il est vraiment pertinent :p .

J'ai juste une petite question : ce code ( qui vient du QCM) :Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
if($version == "7.0"){
        ?>
        <script>
        <!--
        Votre client <?php echo $client ; ?> n'est plus à jour.
        -->
        </script>
        <?php
        }
?>


On ne peut pas réellement savoir s'il est faillible étant donné qu'on ne sait pas quelle traitement a subi (ou pas) la variable $client. Peut-être est elle passée aux htmlentites/htmlspecialchars autre part donc, selon moi, on ne peut pas savoir si il est faillible ou pas ^^ .

Image utilisateur
 

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 74 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.044s (0.0328s)