NB1 : xpost fr.comp.lang.php et fu2 fr.comp.securite (les deux sont
modérés).
Après moult tergiversations, je laisse le fu2 sur fr.comp.securite car
on dépasse le cadre du langage PHP et que les failles à débattre sont
majoritairement
humaines et non liées au langage. J'encourage plus que vivement les
habituels lecteurs/contributeurs de fclphp à suivre la discussion sur
fcs (et à le
consulter régulièrement une fois cette bonne habitude prise ;-)...)
Je me porte volontaire pour essayer de faire une synthèse de la
discussion qu'on pourra intégrer dans l'une des deux FAQs et référencer
depuis l'autre.
NB 2 : Cet article étant long et fcs étant modéré, je rappelle aux
contributeurs qui seraient tentés de le citer intégralement que leur
réponse n'a aucune chance d'être publiée. Si vous avez un doute sur la
bonne manière de répondre sur un forum usenet, usez et abusez de
http://www.giromini.org/usenet-fr/repondre.html
Suite aux divers questions/trolls sur la sécurité des applications
écrites en PHP dans une optique web, je lance un petit débat sur les
pratiques de codage en PHP apportant ou non un vrai "plus" de sécurité.
J'entends par "faille de sécurité" une erreur de codage ou de conception
qui permet de passer outre une procédure d'authentification, d'avoir
accès à des données non publiques, ou de modifier/détruire des
données/des scripts, exclusivement dans une optique web, avec php comme
langage dans mon esrit à l'origine, mais on pourra élargir à d'autres
langages/plateformes de web dynamique comme perl, jsp, asp, .net etc...
Les questions sont les suivantes :
Question 1 :
Quelles sont les principales failles existantes dans les scripts PHP que
vous avez rencontrées ? Quels risques induisaient-elles ? Comment les
avez vous corrigées ?
Question 2 :
Quelles sont les principales fausses vérifications de sécurité que vous
connaissez ? Comment peut-on les contourner (indiquer la difficulté
pour y arriver) ou pourquoi ne sont-elles pas fiables ou non applicables
sur le principe même ?
Question 3 :
Pensez vous à des failles théoriques potentielles que vous n'avez pas
encore vérifiées en pratique ?
------------
Je commence bien entendu :
Question 1 (failles existantes):
a) variables non itilialisées en register_globals=On (injection de
variables)
Risque : principalement accès non autorisés, mais tout est possible.
Correction : initialiser ses variables (Sans blague...), ou utiliser des
fonctions/des objets car ils snt insensibles à l'injection de variables.
Piège : croire qu'on est toujours en register_globals=Off et coder comme
un cochon.
Correction : idem.
b) include dynamiques (ex include($toto);)
Risque : exécution sur sa machine de n'importe quel code souhaité par
l'attaquant (installation de back-doors, défigurations, etc....
Correction : ne pas utiliser d'includes dynamiques ou vérifier que le
fichier est bien local si hébergement dédié. Renforcer les restrictions
d'include_path. Attention, depuis php5, file_exists peut éventuellement
renvoyer TRUE sur des fichiers distants (à restester, je n'ai pas poussé
plus loin que le "tip php5" du manuel).
Piège : essayer de se renforcer avec include($toto.'.php');
Contournement : $toto="[target]/script_sans_extension"; par exemple.
c) injection SQL.
Risque : accès non autorisés, corruption de données
Correction : filtrage des variables, échappement de ' et " par le
caractère ad hoc pour la base de données (\ pour mysql, ' pour sybase
etc...)
d) confiance dans les variables venant de l'extérieur. Par exemple,
recalculer une facture à payer en utilisant un prix transmis par un
champ HIDDEN ou calculé en javascript. Ne pas revalider la donnée parce
qu'elle l'a été en JavaScript.
Risque : multiples. Accès non autorisés, corruption de données, etc...
Correction : ne faire confiance qu'à des données conservées côté serveur
(refaire une requête sgbd pour obtenir le prix de l'article, les frais
de port, etc...). Faire avant tout les validations de cohérence des
données côté serveur et non en javascript.
e) uploads de fichiers.
Outre les failles du langage php lui même qui apparaissent parfois à ce
sujet, les tutoriels que j'ai vus n'insistent pas assez sur le besoin de
faire attention aux extensions autorisées par rapport aux extensions
parsées sur le serveur. Si le serveur considère comme du code php le
fichier toto.php.txt, il faut interdire tout nom de fichier contenant
.php. dans son nom. Ceci doit venir en complément d'une liste
restrictive d'extensions explicitement autorisées (.jpg, .gif, .doc
etc...). Je suis plus particulièrement intéressé sur ce point par les
vérification purement serveur permettant de vérifier le type de fichier
traité.
f) utilisation de header("Location:...)
Algo (erronné)
1. vérification de cohérence
2.1 si problème alors header("Location:bad.php"); // jusqu'ici tout va
bien
2.2 si ok alors header("Location:ok.php"); // et plouf dommage, il
suffit d'appeler directement ok.php avec n'importe quels arguments et
tout passe.
Correction :
2.1 si problème require('erreur.php'); exit();
2.2 (sinon) require('traitement.php'); // rappel : toute variable locale
est alors définie dans traitement.php
g) appels systèmes non filtrés
Dans le même genre que les includes dynamiques, passer directement la
saisie de l'utilisateur à exec() ou system(). Personnellement, j'ai
tendance à interdire tout exécution de code directe, filtrée ou par (je
remplace les actions possibles par des cases à cocher et j'exécute ce
qu'il faut). Peut-être est-ce par trop parano et que 'lon peut autoriser
certaines choses.
Risques : donner la main sur votre machine à un attaquant.
Correction : ne jamais passer quoi que ce soit qui vient de l'extérieur
en argument, mais c'est parfois trop restrictif.
Question 2 (fausses vérifications):
a) vérifier que la donnée a bien été transmise par la méthode POST sous
prétexte qu'elle vient d'un formulaire.
Contournement : il suffit d'envoyer une donnée vérolée par post, que ce
soit en modifiant du html ou en utilisant la librairie CURL par exemple
pour de l'attaque massive. C'est le contenu de la donnée qu'il faut
vérifier, pas son mode de transmission.
b) Vérifier que les données viennent bien "de mon site" en utilisant
HTTP_REFERRER.
Une idée (qui n'est pas de moi) et que je n'ai pas réussi à mettre en
oeuvre : injection SQL par des entiers ou plus généralement injection
SQL insensible aux habituelles vérifications sur les quotes.
Soit la requête : "UPDATE .... WHERE id=$i " avec id de type entier
(typiquement : autoincrement)
But de la manip : injecter dans $i une chaîne transformant la requête en
(par exemple):
"UPDATE ... WHERE id=0 OR 1=1"
(requête qui va corrompre les données en impactant tous les rangs de la
table)
Moyen sous mysql : utiliser la fonction mysql CHAR et complèter la
chaîne en hexa. Mais je n'ai pas réussi à le faire, je me prends ou du
syntax error ou une chaîne non interprêtée.
Espérant faire avancer le shimili... le shcibi... le biniou.
Le Fri, 03 Dec 2004 09:01:56 +0000, Dominique Blas a écrit :
Lors d'un réaffichage, le serveur d'applications expédie donc la chaîne précédente ( la (2) ) pour affichage. C'est très bien et elle apparaît donc comme elle a été saisie ( format (1) ). Magnifique. Excepté que la mise en gras que souhaitait l'internaute a sauté, elle. Et si le serveur doit expédier l'info à destination d'une zone TEXTAREA en vue d'être modifiée (édition d'un message avant soumission par exemple) le serveur doit bien l'expédier au format 1 et non 2 n'est ce pas ? Ca complique tout de même.
C'est pour cela que pas mal de forum ont leur propre balisage, utilisant entre autres des [] et non des <>. Ça ne rend pas la saisie plus difficile ou fastidieuse et, amha, évite pas mal de problèmes.
Effectivement, les Wiki ont, notamment, une symbolique totalement différente
et ne faisant jamais usage des caractères litigieux.
db -- email : usenet blas net
Cedric Blancher wrote:
Le Fri, 03 Dec 2004 09:01:56 +0000, Dominique Blas a écrit :
Lors d'un réaffichage, le serveur d'applications expédie donc la chaîne
précédente ( la (2) ) pour affichage. C'est très bien et elle apparaît
donc comme elle a été saisie ( format (1) ). Magnifique. Excepté que la
mise en gras que souhaitait l'internaute a sauté, elle.
Et si le serveur doit expédier l'info à destination d'une zone TEXTAREA
en vue d'être modifiée (édition d'un message avant soumission par
exemple) le serveur doit bien l'expédier au format 1 et non 2 n'est ce
pas ? Ca complique tout de même.
C'est pour cela que pas mal de forum ont leur propre balisage, utilisant
entre autres des [] et non des <>. Ça ne rend pas la saisie plus
difficile ou fastidieuse et, amha, évite pas mal de problèmes.
Effectivement, les Wiki ont, notamment, une symbolique totalement différente
et ne faisant jamais usage des caractères litigieux.
Le Fri, 03 Dec 2004 09:01:56 +0000, Dominique Blas a écrit :
Lors d'un réaffichage, le serveur d'applications expédie donc la chaîne précédente ( la (2) ) pour affichage. C'est très bien et elle apparaît donc comme elle a été saisie ( format (1) ). Magnifique. Excepté que la mise en gras que souhaitait l'internaute a sauté, elle. Et si le serveur doit expédier l'info à destination d'une zone TEXTAREA en vue d'être modifiée (édition d'un message avant soumission par exemple) le serveur doit bien l'expédier au format 1 et non 2 n'est ce pas ? Ca complique tout de même.
C'est pour cela que pas mal de forum ont leur propre balisage, utilisant entre autres des [] et non des <>. Ça ne rend pas la saisie plus difficile ou fastidieuse et, amha, évite pas mal de problèmes.
Effectivement, les Wiki ont, notamment, une symbolique totalement différente
et ne faisant jamais usage des caractères litigieux.
db -- email : usenet blas net
Simon Marechal
Cedric Blancher wrote:
Les placer en dehors de la webroot est une excellente solution aussi.
Dans le cadre d'un site Web permettant l'échange de fichiers, on risque d'être embêté si les fichiers ne sont pas sous la webroot.
Embêté parce qu'il va falloir coder un frontend permettant de les récupérer, mais ça se fait fort bien. Pas mal d'applis PHP (des forums en particulier) le permettent.
On échange un risque d'upload de script exécutable contre un risque de download de fichier arbitraire. Dans les deux cas, si on rate son coup c'est pas terrible.
Si le risque est l'upload de fichiers php, la solution à base de .htaccess semble meilleure AMHA (à moins qu'il ne soit possible de les uploader hors du repertoire protégé bien sur ...)
Cedric Blancher wrote:
Les placer en dehors de la webroot est une excellente solution aussi.
Dans le cadre d'un site Web permettant l'échange de fichiers, on risque
d'être embêté si les fichiers ne sont pas sous la webroot.
Embêté parce qu'il va falloir coder un frontend permettant de les
récupérer, mais ça se fait fort bien. Pas mal d'applis PHP (des forums
en particulier) le permettent.
On échange un risque d'upload de script exécutable contre un risque de
download de fichier arbitraire. Dans les deux cas, si on rate son coup
c'est pas terrible.
Si le risque est l'upload de fichiers php, la solution à base de
.htaccess semble meilleure AMHA (à moins qu'il ne soit possible de les
uploader hors du repertoire protégé bien sur ...)
Les placer en dehors de la webroot est une excellente solution aussi.
Dans le cadre d'un site Web permettant l'échange de fichiers, on risque d'être embêté si les fichiers ne sont pas sous la webroot.
Embêté parce qu'il va falloir coder un frontend permettant de les récupérer, mais ça se fait fort bien. Pas mal d'applis PHP (des forums en particulier) le permettent.
On échange un risque d'upload de script exécutable contre un risque de download de fichier arbitraire. Dans les deux cas, si on rate son coup c'est pas terrible.
Si le risque est l'upload de fichiers php, la solution à base de .htaccess semble meilleure AMHA (à moins qu'il ne soit possible de les uploader hors du repertoire protégé bien sur ...)
fred.fm
"Dominique Blas" a écrit dans le message de news:41af94a7$0$20233$
Nicolas George wrote:
Ainsi le circuit est le suivant, prenons l'exemple de nos < et >. Monsieur Internaute saisit son texte sous cette forme (1) : blah, blah, <b>blah</b> ..<script> ;... </script> Ceci est traduit en interne de manière (2) : blah, blah, <b>blah</b> ..<script> ;... </script>
OK ?
Lors d'un réaffichage, le serveur d'applications expédie donc la chaîne précédente ( la (2) ) pour affichage. C'est très bien et elle apparaît donc
comme elle a été saisie ( format (1) ). Magnifique. Excepté que la mise en gras que souhaitait l'internaute a sauté, elle.
Excusez mon éventuelle naïveté, mais ne suffirait-il pas de purger l'entrée de ..<script> et </script> et d'autres tags potentiellement dangereux ?
--
retirer "-enlever-ceci." pour répondre remove "-enlever-ceci." to answer
"Dominique Blas" <nospam@spam.int> a écrit dans le message de
news:41af94a7$0$20233$636a15ce@news.free.fr...
Nicolas George wrote:
Ainsi le circuit est le suivant, prenons l'exemple de nos < et >.
Monsieur Internaute saisit son texte sous cette forme (1) :
blah, blah, <b>blah</b> ..<script> ;... </script>
Ceci est traduit en interne de manière (2) :
blah, blah, <b>blah</b> ..<script> ;...
</script>
OK ?
Lors d'un réaffichage, le serveur d'applications expédie donc la chaîne
précédente ( la (2) ) pour affichage. C'est très bien et elle apparaît
donc
comme elle a été saisie ( format (1) ). Magnifique. Excepté que la mise en
gras que souhaitait l'internaute a sauté, elle.
Excusez mon éventuelle naïveté, mais ne suffirait-il pas de purger l'entrée
de ..<script> et </script>
et d'autres tags potentiellement dangereux ?
--
fred.-enlever-ceci.fm@laposte.net
retirer "-enlever-ceci." pour répondre
remove "-enlever-ceci." to answer
"Dominique Blas" a écrit dans le message de news:41af94a7$0$20233$
Nicolas George wrote:
Ainsi le circuit est le suivant, prenons l'exemple de nos < et >. Monsieur Internaute saisit son texte sous cette forme (1) : blah, blah, <b>blah</b> ..<script> ;... </script> Ceci est traduit en interne de manière (2) : blah, blah, <b>blah</b> ..<script> ;... </script>
OK ?
Lors d'un réaffichage, le serveur d'applications expédie donc la chaîne précédente ( la (2) ) pour affichage. C'est très bien et elle apparaît donc
comme elle a été saisie ( format (1) ). Magnifique. Excepté que la mise en gras que souhaitait l'internaute a sauté, elle.
Excusez mon éventuelle naïveté, mais ne suffirait-il pas de purger l'entrée de ..<script> et </script> et d'autres tags potentiellement dangereux ?
--
retirer "-enlever-ceci." pour répondre remove "-enlever-ceci." to answer
Christophe Casalegno
Nicob wrote:
Dans ton cas, il faut que le code d'upload *et* le code de download soit sûr. Dans le mien, si le code d'upload est OK et que le .htaccess est présent, tout est OK.
Hormis le problème de performance, utiliser ainsi la base de donnée c'est également faire défaut au compartimentage sécurité de l'application (accès à la base = on bouzille tout), à moins que dans le cas par exemple d'un forum ou d'un cms tu gère alors la partie information/texte dans des fichiers xml plutot qu'en base sql.
99% des applications web ne sont de toute manière pas écrite dans une optique de sécurité, la première raison étant qu'il faut s'adapter au plus grand nombre (exemple : un seul user, une seule base, etc...).
La sécurité de l'application souffre énormement de ces restrictions, car les possibilité de sécurité sont bien plus importantes lorsque l'on peut gérer la chose telle que plus haut, certaines possibilités d'exploitation étant directement bloquées par la sécurité intrinsèque du système et de l'architecture meme de l'application (une injection sql sur un formulaire destiné à la consultation en vue de modifier ou détruire un champs n'aura aucun effet si l'utilisateur sql utilisé à ce moment là ne dispose pas des droits d'écriture...)
amicalement,
-- Christophe Casalegno | Groupe Digital Network | UIN : 153305055 http://www.digital-network.net | http://www.securite-reseaux.com TISTC | OFREMHI | IIHEC | IICRAI | CIRET-AVT | KESAC | IDMEF Forum Technical director | Security Intrusion techniques & infowar specialist.
Nicob wrote:
Dans ton cas, il faut que le code d'upload *et* le code de download soit
sûr. Dans le mien, si le code d'upload est OK et que le .htaccess est
présent, tout est OK.
Hormis le problème de performance, utiliser ainsi la base de donnée c'est
également faire défaut au compartimentage sécurité de l'application (accès
à la base = on bouzille tout), à moins que dans le cas par exemple d'un
forum ou d'un cms tu gère alors la partie information/texte dans des
fichiers xml plutot qu'en base sql.
99% des applications web ne sont de toute manière pas écrite dans une
optique de sécurité, la première raison étant qu'il faut s'adapter au plus
grand nombre (exemple : un seul user, une seule base, etc...).
La sécurité de l'application souffre énormement de ces restrictions, car les
possibilité de sécurité sont bien plus importantes lorsque l'on peut gérer
la chose telle que plus haut, certaines possibilités d'exploitation étant
directement bloquées par la sécurité intrinsèque du système et de
l'architecture meme de l'application (une injection sql sur un formulaire
destiné à la consultation en vue de modifier ou détruire un champs n'aura
aucun effet si l'utilisateur sql utilisé à ce moment là ne dispose pas des
droits d'écriture...)
amicalement,
--
Christophe Casalegno | Groupe Digital Network | UIN : 153305055
http://www.digital-network.net | http://www.securite-reseaux.com
TISTC | OFREMHI | IIHEC | IICRAI | CIRET-AVT | KESAC | IDMEF Forum
Technical director | Security Intrusion techniques & infowar specialist.
Dans ton cas, il faut que le code d'upload *et* le code de download soit sûr. Dans le mien, si le code d'upload est OK et que le .htaccess est présent, tout est OK.
Hormis le problème de performance, utiliser ainsi la base de donnée c'est également faire défaut au compartimentage sécurité de l'application (accès à la base = on bouzille tout), à moins que dans le cas par exemple d'un forum ou d'un cms tu gère alors la partie information/texte dans des fichiers xml plutot qu'en base sql.
99% des applications web ne sont de toute manière pas écrite dans une optique de sécurité, la première raison étant qu'il faut s'adapter au plus grand nombre (exemple : un seul user, une seule base, etc...).
La sécurité de l'application souffre énormement de ces restrictions, car les possibilité de sécurité sont bien plus importantes lorsque l'on peut gérer la chose telle que plus haut, certaines possibilités d'exploitation étant directement bloquées par la sécurité intrinsèque du système et de l'architecture meme de l'application (une injection sql sur un formulaire destiné à la consultation en vue de modifier ou détruire un champs n'aura aucun effet si l'utilisateur sql utilisé à ce moment là ne dispose pas des droits d'écriture...)
amicalement,
-- Christophe Casalegno | Groupe Digital Network | UIN : 153305055 http://www.digital-network.net | http://www.securite-reseaux.com TISTC | OFREMHI | IIHEC | IICRAI | CIRET-AVT | KESAC | IDMEF Forum Technical director | Security Intrusion techniques & infowar specialist.
John Gallet
Bonjour,
Excusez mon éventuelle naïveté, mais ne suffirait-il pas de purger l'entrée de ..<script> et </script> et d'autres tags potentiellement dangereux ?
Je dirais oui sur le fond mais comment en avoir la liste exhaustive ? C'est un peu pareil avec l'encodage de ces tags, si tu envoies %u0003Cscript au lieu de <script et bien IE recollera les morceaux et exécutera le JS offensif stocké.
a++ JG
Bonjour,
Excusez mon éventuelle naïveté, mais ne suffirait-il pas de purger l'entrée
de ..<script> et </script>
et d'autres tags potentiellement dangereux ?
Je dirais oui sur le fond mais comment en avoir la liste exhaustive ?
C'est un peu pareil avec l'encodage de ces tags, si tu envoies
%u0003Cscript au lieu de <script et bien IE recollera les morceaux et
exécutera le JS offensif stocké.
Excusez mon éventuelle naïveté, mais ne suffirait-il pas de purger l'entrée de ..<script> et </script> et d'autres tags potentiellement dangereux ?
Je dirais oui sur le fond mais comment en avoir la liste exhaustive ? C'est un peu pareil avec l'encodage de ces tags, si tu envoies %u0003Cscript au lieu de <script et bien IE recollera les morceaux et exécutera le JS offensif stocké.
a++ JG
Dominique Blas
John Gallet wrote:
Bonjour,
Excusez mon éventuelle naïveté, mais ne suffirait-il pas de purger l'entrée de ..<script> et </script> et d'autres tags potentiellement dangereux ?
Je dirais oui sur le fond mais comment en avoir la liste exhaustive ? On pratique à l'envers : on ne prend que ce qui est sûr : uniquement les
marques de mise en forme.
C'est un peu pareil avec l'encodage de ces tags, si tu envoies %u0003Cscript au lieu de <script et bien IE recollera les morceaux et exécutera le JS offensif stocké. On peut pratiquer le récursif (comme le pratique IE) mais c'est long et donc
couteux et justifie amplement le développement d'une bibliothèque adaptée (ou d'une classe).
db
a++ JG
-- email : usenet blas net
John Gallet wrote:
Bonjour,
Excusez mon éventuelle naïveté, mais ne suffirait-il pas de purger
l'entrée de ..<script> et </script>
et d'autres tags potentiellement dangereux ?
Je dirais oui sur le fond mais comment en avoir la liste exhaustive ?
On pratique à l'envers : on ne prend que ce qui est sûr : uniquement les
marques de mise en forme.
C'est un peu pareil avec l'encodage de ces tags, si tu envoies
%u0003Cscript au lieu de <script et bien IE recollera les morceaux et
exécutera le JS offensif stocké.
On peut pratiquer le récursif (comme le pratique IE) mais c'est long et donc
couteux et justifie amplement le développement d'une bibliothèque adaptée
(ou d'une classe).
Excusez mon éventuelle naïveté, mais ne suffirait-il pas de purger l'entrée de ..<script> et </script> et d'autres tags potentiellement dangereux ?
Je dirais oui sur le fond mais comment en avoir la liste exhaustive ? On pratique à l'envers : on ne prend que ce qui est sûr : uniquement les
marques de mise en forme.
C'est un peu pareil avec l'encodage de ces tags, si tu envoies %u0003Cscript au lieu de <script et bien IE recollera les morceaux et exécutera le JS offensif stocké. On peut pratiquer le récursif (comme le pratique IE) mais c'est long et donc
couteux et justifie amplement le développement d'une bibliothèque adaptée (ou d'une classe).
db
a++ JG
-- email : usenet blas net
Nicolas George
John Gallet wrote in message :
Je dirais oui sur le fond mais comment en avoir la liste exhaustive ? C'est un peu pareil avec l'encodage de ces tags, si tu envoies %u0003Cscript au lieu de <script et bien IE recollera les morceaux et exécutera le JS offensif stocké.
Est-ce que quelqu'un peut préciser ce que c'est que cette histoire de décodage récursif des %u par internet explorer ?
Vraiment, là, l'intuition me dit que ça n'a rien à voir dans ce contexte : le bug serait trop évident, aucun navigateur ne peut l'avoir. Et de fait, mon spécialiste de windows habituel me confirme : si internet explorer voit %u0003C dans une page HTML, il affiche %0003C et strictement rien d'autre.
Il n'y a vraiment aucune raison qu'une quelconque interaction se produise ici : les problèmes de <...> devenant des balises à interpréter se situent dans ce que le navigateur reçoit du serveur et affiche, alors que les histoires de %uXXXX concernent l'encodage des requêtes GET dans les URL envoyées par le navigateur au serveur. Ce n'est tout simplement pas le même contexte. À la limite, un navigateur n'a même pas besoin d'avoir les fonctions qui décodent les %u, il n'a besoin que de les encoder (mais internet explorer a peut-être quand même le nécessaire, par exemple pour afficher les URL avec des caractères bizarres).
John Gallet wrote in message <41B431A4.63A9F506@wanadoo.fr>:
Je dirais oui sur le fond mais comment en avoir la liste exhaustive ?
C'est un peu pareil avec l'encodage de ces tags, si tu envoies
%u0003Cscript au lieu de <script et bien IE recollera les morceaux et
exécutera le JS offensif stocké.
Est-ce que quelqu'un peut préciser ce que c'est que cette histoire de
décodage récursif des %u par internet explorer ?
Vraiment, là, l'intuition me dit que ça n'a rien à voir dans ce contexte :
le bug serait trop évident, aucun navigateur ne peut l'avoir. Et de fait,
mon spécialiste de windows habituel me confirme : si internet explorer voit
%u0003C dans une page HTML, il affiche %0003C et strictement rien d'autre.
Il n'y a vraiment aucune raison qu'une quelconque interaction se produise
ici : les problèmes de <...> devenant des balises à interpréter se situent
dans ce que le navigateur reçoit du serveur et affiche, alors que les
histoires de %uXXXX concernent l'encodage des requêtes GET dans les URL
envoyées par le navigateur au serveur. Ce n'est tout simplement pas le même
contexte. À la limite, un navigateur n'a même pas besoin d'avoir les
fonctions qui décodent les %u, il n'a besoin que de les encoder (mais
internet explorer a peut-être quand même le nécessaire, par exemple pour
afficher les URL avec des caractères bizarres).
Je dirais oui sur le fond mais comment en avoir la liste exhaustive ? C'est un peu pareil avec l'encodage de ces tags, si tu envoies %u0003Cscript au lieu de <script et bien IE recollera les morceaux et exécutera le JS offensif stocké.
Est-ce que quelqu'un peut préciser ce que c'est que cette histoire de décodage récursif des %u par internet explorer ?
Vraiment, là, l'intuition me dit que ça n'a rien à voir dans ce contexte : le bug serait trop évident, aucun navigateur ne peut l'avoir. Et de fait, mon spécialiste de windows habituel me confirme : si internet explorer voit %u0003C dans une page HTML, il affiche %0003C et strictement rien d'autre.
Il n'y a vraiment aucune raison qu'une quelconque interaction se produise ici : les problèmes de <...> devenant des balises à interpréter se situent dans ce que le navigateur reçoit du serveur et affiche, alors que les histoires de %uXXXX concernent l'encodage des requêtes GET dans les URL envoyées par le navigateur au serveur. Ce n'est tout simplement pas le même contexte. À la limite, un navigateur n'a même pas besoin d'avoir les fonctions qui décodent les %u, il n'a besoin que de les encoder (mais internet explorer a peut-être quand même le nécessaire, par exemple pour afficher les URL avec des caractères bizarres).
Nicob
On Tue, 07 Dec 2004 09:17:35 +0000, Nicolas George wrote:
Est-ce que quelqu'un peut préciser ce que c'est que cette histoire de décodage récursif des %u par internet explorer ?
AFAIK, cela ne concerne pas IE, mais IIS : http://archives.neohapsis.com/archives/bugtraq/2001-09/0017.html
Nicob
On Tue, 07 Dec 2004 09:17:35 +0000, Nicolas George wrote:
Est-ce que quelqu'un peut préciser ce que c'est que cette histoire de
décodage récursif des %u par internet explorer ?
AFAIK, cela ne concerne pas IE, mais IIS :
http://archives.neohapsis.com/archives/bugtraq/2001-09/0017.html
On Tue, 07 Dec 2004 09:17:35 +0000, Nicolas George wrote:
Est-ce que quelqu'un peut préciser ce que c'est que cette histoire de décodage récursif des %u par internet explorer ?
AFAIK, cela ne concerne pas IE, mais IIS : http://archives.neohapsis.com/archives/bugtraq/2001-09/0017.html
Nicob
Nicolas George
Nicob wrote in message :
AFAIK, cela ne concerne pas IE, mais IIS : http://archives.neohapsis.com/archives/bugtraq/2001-09/0017.html
(Pas de rectification en 48 h, je suppose que c'est bien de ça qu'il est question.)
Ah, c'est tout de suite plus sensé !
S'il est vrai que cette histoire peut causer des trous de sécurité, c'est hors de propos dans cette branche de la discussion, puisqu'elle concernait l'envoi de données non-sûres par le serveur au client. Dans ce cas, je maintiens : neutraliser les caractères <, > et & en les codant comme entités HTML suffit à se prémunir totalement.
Je pense que s'il y a tant de cross-site-scripting et injections en tout genre, ce n'est pas tant parce que le problème est subtil et plein de pièges, mais bien parce qu'une proportion dramatiquement importante des programmeurs ne font tout simplement pas attention à ça.
Nicob wrote in message
<pan.2004.12.07.10.07.29.637681@I.hate.spammers.com>:
AFAIK, cela ne concerne pas IE, mais IIS :
http://archives.neohapsis.com/archives/bugtraq/2001-09/0017.html
(Pas de rectification en 48 h, je suppose que c'est bien de ça qu'il est
question.)
Ah, c'est tout de suite plus sensé !
S'il est vrai que cette histoire peut causer des trous de sécurité, c'est
hors de propos dans cette branche de la discussion, puisqu'elle concernait
l'envoi de données non-sûres par le serveur au client. Dans ce cas, je
maintiens : neutraliser les caractères <, > et & en les codant comme entités
HTML suffit à se prémunir totalement.
Je pense que s'il y a tant de cross-site-scripting et injections en tout
genre, ce n'est pas tant parce que le problème est subtil et plein de
pièges, mais bien parce qu'une proportion dramatiquement importante des
programmeurs ne font tout simplement pas attention à ça.
AFAIK, cela ne concerne pas IE, mais IIS : http://archives.neohapsis.com/archives/bugtraq/2001-09/0017.html
(Pas de rectification en 48 h, je suppose que c'est bien de ça qu'il est question.)
Ah, c'est tout de suite plus sensé !
S'il est vrai que cette histoire peut causer des trous de sécurité, c'est hors de propos dans cette branche de la discussion, puisqu'elle concernait l'envoi de données non-sûres par le serveur au client. Dans ce cas, je maintiens : neutraliser les caractères <, > et & en les codant comme entités HTML suffit à se prémunir totalement.
Je pense que s'il y a tant de cross-site-scripting et injections en tout genre, ce n'est pas tant parce que le problème est subtil et plein de pièges, mais bien parce qu'une proportion dramatiquement importante des programmeurs ne font tout simplement pas attention à ça.
Nicob
On Thu, 09 Dec 2004 19:37:55 +0000, Nicolas George wrote:
Dans ce cas, je maintiens : neutraliser les caractères <, > et & en les codant comme entités HTML suffit à se prémunir totalement.
J'apprécie vos certitudes. Mais jetez donc un oeil à cette page : http://oz-formation.nexenservices.com/wholetrack/modules/news/article.php?item_id5
Nicob
On Thu, 09 Dec 2004 19:37:55 +0000, Nicolas George wrote:
Dans ce cas, je maintiens : neutraliser les caractères <, > et & en
les codant comme entités HTML suffit à se prémunir totalement.
J'apprécie vos certitudes. Mais jetez donc un oeil à cette page :
http://oz-formation.nexenservices.com/wholetrack/modules/news/article.php?item_id5