J'apprécie vos certitudes. Mais jetez donc un oeil à cette page :
http://oz-formation.nexenservices.com/wholetrack/modules/news/article.php?item_id5
J'apprécie vos certitudes. Mais jetez donc un oeil à cette page :
http://oz-formation.nexenservices.com/wholetrack/modules/news/article.php?item_id5
J'apprécie vos certitudes. Mais jetez donc un oeil à cette page :
http://oz-formation.nexenservices.com/wholetrack/modules/news/article.php?item_id5
Le patch proposé à la fin (remplacer onclick par on*click) montre
qu'en plus l'auteur de cette page n'a rien compris au problème, puisque
la bonne réponse aurait été simplement de remplacer " par son
expression correcte dans ce contexte, à savoir "
1 : de plus, vérifier que les champs entrés sont syntaxiquement
corrects, par exemple qu'une URI respecte la syntaxe définie par la RFC
ad-hoc, serait une mesure tout à fait souhaitable.
Le patch proposé à la fin (remplacer onclick par on*click) montre
qu'en plus l'auteur de cette page n'a rien compris au problème, puisque
la bonne réponse aurait été simplement de remplacer " par son
expression correcte dans ce contexte, à savoir "
1 : de plus, vérifier que les champs entrés sont syntaxiquement
corrects, par exemple qu'une URI respecte la syntaxe définie par la RFC
ad-hoc, serait une mesure tout à fait souhaitable.
Le patch proposé à la fin (remplacer onclick par on*click) montre
qu'en plus l'auteur de cette page n'a rien compris au problème, puisque
la bonne réponse aurait été simplement de remplacer " par son
expression correcte dans ce contexte, à savoir "
1 : de plus, vérifier que les champs entrés sont syntaxiquement
corrects, par exemple qu'une URI respecte la syntaxe définie par la RFC
ad-hoc, serait une mesure tout à fait souhaitable.
Ce remplacement aurait été la bonne solution dans *ce* cas précis.
Supposons que sur une autre page, un autre développeur affiche un lien à
partir des infos donné par le membre, et fait ceci :
<a href='http://$url'>
Ici, ce sera la simple quote qu'il faudra traiter. Sur une autre page :
<a href=http://$url>
Et ce coup-ci, les espaces.
Donc cette approche est à mon avis très
dangereuse, il vaut mieux autoriser ce qu'on estime non dangereux et c'est
tout. Si le champ n'est pas conforme, on ne fait pas de traitement de
"protection" (passage en "e, ...) car trop dangereux. On se contente
de logguer et de sortir "proprement".
1 : de plus, vérifier que les champs entrés sont syntaxiquement
corrects, par exemple qu'une URI respecte la syntaxe définie par la RFC
ad-hoc, serait une mesure tout à fait souhaitable.
Solution dangereuse elle aussi !
Ce remplacement aurait été la bonne solution dans *ce* cas précis.
Supposons que sur une autre page, un autre développeur affiche un lien à
partir des infos donné par le membre, et fait ceci :
<a href='http://$url'>
Ici, ce sera la simple quote qu'il faudra traiter. Sur une autre page :
<a href=http://$url>
Et ce coup-ci, les espaces.
Donc cette approche est à mon avis très
dangereuse, il vaut mieux autoriser ce qu'on estime non dangereux et c'est
tout. Si le champ n'est pas conforme, on ne fait pas de traitement de
"protection" (passage en "e, ...) car trop dangereux. On se contente
de logguer et de sortir "proprement".
1 : de plus, vérifier que les champs entrés sont syntaxiquement
corrects, par exemple qu'une URI respecte la syntaxe définie par la RFC
ad-hoc, serait une mesure tout à fait souhaitable.
Solution dangereuse elle aussi !
Ce remplacement aurait été la bonne solution dans *ce* cas précis.
Supposons que sur une autre page, un autre développeur affiche un lien à
partir des infos donné par le membre, et fait ceci :
<a href='http://$url'>
Ici, ce sera la simple quote qu'il faudra traiter. Sur une autre page :
<a href=http://$url>
Et ce coup-ci, les espaces.
Donc cette approche est à mon avis très
dangereuse, il vaut mieux autoriser ce qu'on estime non dangereux et c'est
tout. Si le champ n'est pas conforme, on ne fait pas de traitement de
"protection" (passage en "e, ...) car trop dangereux. On se contente
de logguer et de sortir "proprement".
1 : de plus, vérifier que les champs entrés sont syntaxiquement
corrects, par exemple qu'une URI respecte la syntaxe définie par la RFC
ad-hoc, serait une mesure tout à fait souhaitable.
Solution dangereuse elle aussi !
Je reprends mon discours depuis le début. La question est : comment empêcher
que des données envoyées par un utilisateur hostile ne soient transmises à
un autre client comme données malicieuses. Cette question a en fait deux
aspects, qui ont été mélangés, ce qui a nuit au propos :
1. Comment, techniquement, protéger les données ?
2. Comment éviter qu'un programmeur inattentif oublie cette protection ?
La réponse au 1, j'oserais même dire : l'unique réponse est : il suffit de
coder les caractères actifs du HTML par les entités correspondantes. Les
caractères actifs sont <, >, &, ainsi que, dans le contexte d'un attribut,
le guillemet qui délimite cet attribut.
Je reprends mon discours depuis le début. La question est : comment empêcher
que des données envoyées par un utilisateur hostile ne soient transmises à
un autre client comme données malicieuses. Cette question a en fait deux
aspects, qui ont été mélangés, ce qui a nuit au propos :
1. Comment, techniquement, protéger les données ?
2. Comment éviter qu'un programmeur inattentif oublie cette protection ?
La réponse au 1, j'oserais même dire : l'unique réponse est : il suffit de
coder les caractères actifs du HTML par les entités correspondantes. Les
caractères actifs sont <, >, &, ainsi que, dans le contexte d'un attribut,
le guillemet qui délimite cet attribut.
Je reprends mon discours depuis le début. La question est : comment empêcher
que des données envoyées par un utilisateur hostile ne soient transmises à
un autre client comme données malicieuses. Cette question a en fait deux
aspects, qui ont été mélangés, ce qui a nuit au propos :
1. Comment, techniquement, protéger les données ?
2. Comment éviter qu'un programmeur inattentif oublie cette protection ?
La réponse au 1, j'oserais même dire : l'unique réponse est : il suffit de
coder les caractères actifs du HTML par les entités correspondantes. Les
caractères actifs sont <, >, &, ainsi que, dans le contexte d'un attribut,
le guillemet qui délimite cet attribut.
l'unique réponse est : il suffit de coder les caractères actifs du
HTML par les entités correspondantes. Les caractères actifs sont <, >,
&, ainsi que, dans le contexte d'un attribut, le guillemet qui délimite
cet attribut.
Ce qui est dangereux, c'est de mettre devant un clavier pour coder une
application en milieu hostile quelqu'un qui se croit développeur web
parce qu'il a lu « PHP pour les nuls », mais qui ne comprend pas ce
qu'il fait. Ça, oui, c'est dangereux.
l'unique réponse est : il suffit de coder les caractères actifs du
HTML par les entités correspondantes. Les caractères actifs sont <, >,
&, ainsi que, dans le contexte d'un attribut, le guillemet qui délimite
cet attribut.
Ce qui est dangereux, c'est de mettre devant un clavier pour coder une
application en milieu hostile quelqu'un qui se croit développeur web
parce qu'il a lu « PHP pour les nuls », mais qui ne comprend pas ce
qu'il fait. Ça, oui, c'est dangereux.
l'unique réponse est : il suffit de coder les caractères actifs du
HTML par les entités correspondantes. Les caractères actifs sont <, >,
&, ainsi que, dans le contexte d'un attribut, le guillemet qui délimite
cet attribut.
Ce qui est dangereux, c'est de mettre devant un clavier pour coder une
application en milieu hostile quelqu'un qui se croit développeur web
parce qu'il a lu « PHP pour les nuls », mais qui ne comprend pas ce
qu'il fait. Ça, oui, c'est dangereux.
Donc cette approche est à mon avis très
dangereuse, il vaut mieux autoriser ce qu'on estime non dangereux et c'est
tout. Si le champ n'est pas conforme, on ne fait pas de traitement de
"protection" (passage en "e, ...) car trop dangereux. On se contente
de logguer et de sortir "proprement".
Je reprends mon discours depuis le début. La question est : comment empêcher
que des données envoyées par un utilisateur hostile ne soient transmises à
un autre client comme données malicieuses. Cette question a en fait deux
aspects, qui ont été mélangés, ce qui a nuit au propos :
1. Comment, techniquement, protéger les données ?
2. Comment éviter qu'un programmeur inattentif oublie cette protection ?
La réponse au 1, j'oserais même dire : l'unique réponse est : il suffit de
coder les caractères actifs du HTML par les entités correspondantes. Les
caractères actifs sont <, >, &, ainsi que, dans le contexte d'un attribut,
le guillemet qui délimite cet attribut.
Pour le point 2, il y a plusieurs réponses. Celle que je préconise est
d'utiliser une bibliothèque XML pour manipuler un arbre DOM.
Donc cette approche est à mon avis très
dangereuse, il vaut mieux autoriser ce qu'on estime non dangereux et c'est
tout. Si le champ n'est pas conforme, on ne fait pas de traitement de
"protection" (passage en "e, ...) car trop dangereux. On se contente
de logguer et de sortir "proprement".
Je reprends mon discours depuis le début. La question est : comment empêcher
que des données envoyées par un utilisateur hostile ne soient transmises à
un autre client comme données malicieuses. Cette question a en fait deux
aspects, qui ont été mélangés, ce qui a nuit au propos :
1. Comment, techniquement, protéger les données ?
2. Comment éviter qu'un programmeur inattentif oublie cette protection ?
La réponse au 1, j'oserais même dire : l'unique réponse est : il suffit de
coder les caractères actifs du HTML par les entités correspondantes. Les
caractères actifs sont <, >, &, ainsi que, dans le contexte d'un attribut,
le guillemet qui délimite cet attribut.
Pour le point 2, il y a plusieurs réponses. Celle que je préconise est
d'utiliser une bibliothèque XML pour manipuler un arbre DOM.
Donc cette approche est à mon avis très
dangereuse, il vaut mieux autoriser ce qu'on estime non dangereux et c'est
tout. Si le champ n'est pas conforme, on ne fait pas de traitement de
"protection" (passage en "e, ...) car trop dangereux. On se contente
de logguer et de sortir "proprement".
Je reprends mon discours depuis le début. La question est : comment empêcher
que des données envoyées par un utilisateur hostile ne soient transmises à
un autre client comme données malicieuses. Cette question a en fait deux
aspects, qui ont été mélangés, ce qui a nuit au propos :
1. Comment, techniquement, protéger les données ?
2. Comment éviter qu'un programmeur inattentif oublie cette protection ?
La réponse au 1, j'oserais même dire : l'unique réponse est : il suffit de
coder les caractères actifs du HTML par les entités correspondantes. Les
caractères actifs sont <, >, &, ainsi que, dans le contexte d'un attribut,
le guillemet qui délimite cet attribut.
Pour le point 2, il y a plusieurs réponses. Celle que je préconise est
d'utiliser une bibliothèque XML pour manipuler un arbre DOM.
Pour des exemples de contournement de filtres anti-XSS :
http://www.shocking.com/~rsnake/xss.html
Pour des exemples de contournement de filtres anti-XSS :
http://www.shocking.com/~rsnake/xss.html
Pour des exemples de contournement de filtres anti-XSS :
http://www.shocking.com/~rsnake/xss.html
Pour moi le débat n'est pas encore tellement de savoir quoi faire pour
désamorcer du code offensif dormant, mais comment le *détecter* par type
de média (osons nous restreindre à une sortie html, ça suffira bien).
Est-ce vraiment suffisant, là est la question. Pour un client de type
navigateur, ça m'a l'air de réduire déjà pas mal de choses, mais
jusqu'où ?
La raison pour laquelle j'ai laissé ce bout du thread en vrac est que je
n'arrive pas à voir comment l'utiliser en ce sens. Pour moi, ça ne fait
que repousser le problème. J'aurais un joli
<MES_DATA>gnagna<SCRIPT>....</SCRIPT>gnagnagna</MES_DATA> et avec ça je
ne serai pas plus avancé après qu'avant. Quand je vais balcner le
contenu du noeud MES_DATA, le reste risque de partir avec, me
semble-t-il.
J'ai aussi du mal à maitrîser l'aspect performances de la
validation temps réel de la validité du xml.
Pour moi le débat n'est pas encore tellement de savoir quoi faire pour
désamorcer du code offensif dormant, mais comment le *détecter* par type
de média (osons nous restreindre à une sortie html, ça suffira bien).
Est-ce vraiment suffisant, là est la question. Pour un client de type
navigateur, ça m'a l'air de réduire déjà pas mal de choses, mais
jusqu'où ?
La raison pour laquelle j'ai laissé ce bout du thread en vrac est que je
n'arrive pas à voir comment l'utiliser en ce sens. Pour moi, ça ne fait
que repousser le problème. J'aurais un joli
<MES_DATA>gnagna<SCRIPT>....</SCRIPT>gnagnagna</MES_DATA> et avec ça je
ne serai pas plus avancé après qu'avant. Quand je vais balcner le
contenu du noeud MES_DATA, le reste risque de partir avec, me
semble-t-il.
J'ai aussi du mal à maitrîser l'aspect performances de la
validation temps réel de la validité du xml.
Pour moi le débat n'est pas encore tellement de savoir quoi faire pour
désamorcer du code offensif dormant, mais comment le *détecter* par type
de média (osons nous restreindre à une sortie html, ça suffira bien).
Est-ce vraiment suffisant, là est la question. Pour un client de type
navigateur, ça m'a l'air de réduire déjà pas mal de choses, mais
jusqu'où ?
La raison pour laquelle j'ai laissé ce bout du thread en vrac est que je
n'arrive pas à voir comment l'utiliser en ce sens. Pour moi, ça ne fait
que repousser le problème. J'aurais un joli
<MES_DATA>gnagna<SCRIPT>....</SCRIPT>gnagnagna</MES_DATA> et avec ça je
ne serai pas plus avancé après qu'avant. Quand je vais balcner le
contenu du noeud MES_DATA, le reste risque de partir avec, me
semble-t-il.
J'ai aussi du mal à maitrîser l'aspect performances de la
validation temps réel de la validité du xml.
Pour moi le débat n'est pas encore tellement de savoir quoi faire pour
désamorcer du code offensif dormant, mais comment le *détecter* par type
de média (osons nous restreindre à une sortie html, ça suffira bien).
Ah, ça change tout,
parce qu'au contraire, j'ai traité uniquement de la
question : comment encoder un contenu accepté de manière à ce qu'il soit
interprété comme tel, et pas comme du contenu offensif. En d'autres termes,
mon propos était d'indiquer comment faire pour que si un visiteur tape dans
un formulaire :
<script>system("rm -rf /")</script>
alors ce texte va s'afficher tel quel chez les destinataire, et pas
provoquer des actions incongrues.
Est-ce vraiment suffisant, là est la question. Pour un client de type
navigateur, ça m'a l'air de réduire déjà pas mal de choses, mais
jusqu'où ?
Les standards du web nous disent que c'est sûr. Après, il est possible que
tel ou tel client ait un bug à ce niveau, mais je n'en ai jamais entendu
parler,
et j'ai tendance à penser que ce genre de bug serait de toutes
façons repéré bien avant la publication du client en question.
Je suppose que la chaîne obtenue du client dans cet exemple était au départ
« gnagna<SCRIPT>....</SCRIPT>gnagnagna », n'est-ce pas ?
Toutafé.
my $mes_data = $document->createElement("MES_DATA");
$mes_data->appendText($client_text);
Or la méthode appendText remplacera convenablement les caractères actifs.
Comme les données offensives sont toutes, originalement, dans
le monde « chaîne de caractères » et que le seul point de sortie est dans le
monde « arbre XML », on a la garantie que toutes ces données offensives
passent à un moment ou à un autre à la validation.
- investir dans des serveurs plus puissants ;
- investir dans des programmeurs plus compétents.
Les deux coûtent, évidemment. Mais après tout, il faut bien se donner les
moyens de ses objectifs.
:-))) La première solution coutera bien moins cher à court terme que la
Pour moi le débat n'est pas encore tellement de savoir quoi faire pour
désamorcer du code offensif dormant, mais comment le *détecter* par type
de média (osons nous restreindre à une sortie html, ça suffira bien).
Ah, ça change tout,
parce qu'au contraire, j'ai traité uniquement de la
question : comment encoder un contenu accepté de manière à ce qu'il soit
interprété comme tel, et pas comme du contenu offensif. En d'autres termes,
mon propos était d'indiquer comment faire pour que si un visiteur tape dans
un formulaire :
<script>system("rm -rf /")</script>
alors ce texte va s'afficher tel quel chez les destinataire, et pas
provoquer des actions incongrues.
Est-ce vraiment suffisant, là est la question. Pour un client de type
navigateur, ça m'a l'air de réduire déjà pas mal de choses, mais
jusqu'où ?
Les standards du web nous disent que c'est sûr. Après, il est possible que
tel ou tel client ait un bug à ce niveau, mais je n'en ai jamais entendu
parler,
et j'ai tendance à penser que ce genre de bug serait de toutes
façons repéré bien avant la publication du client en question.
Je suppose que la chaîne obtenue du client dans cet exemple était au départ
« gnagna<SCRIPT>....</SCRIPT>gnagnagna », n'est-ce pas ?
Toutafé.
my $mes_data = $document->createElement("MES_DATA");
$mes_data->appendText($client_text);
Or la méthode appendText remplacera convenablement les caractères actifs.
Comme les données offensives sont toutes, originalement, dans
le monde « chaîne de caractères » et que le seul point de sortie est dans le
monde « arbre XML », on a la garantie que toutes ces données offensives
passent à un moment ou à un autre à la validation.
- investir dans des serveurs plus puissants ;
- investir dans des programmeurs plus compétents.
Les deux coûtent, évidemment. Mais après tout, il faut bien se donner les
moyens de ses objectifs.
:-))) La première solution coutera bien moins cher à court terme que la
Pour moi le débat n'est pas encore tellement de savoir quoi faire pour
désamorcer du code offensif dormant, mais comment le *détecter* par type
de média (osons nous restreindre à une sortie html, ça suffira bien).
Ah, ça change tout,
parce qu'au contraire, j'ai traité uniquement de la
question : comment encoder un contenu accepté de manière à ce qu'il soit
interprété comme tel, et pas comme du contenu offensif. En d'autres termes,
mon propos était d'indiquer comment faire pour que si un visiteur tape dans
un formulaire :
<script>system("rm -rf /")</script>
alors ce texte va s'afficher tel quel chez les destinataire, et pas
provoquer des actions incongrues.
Est-ce vraiment suffisant, là est la question. Pour un client de type
navigateur, ça m'a l'air de réduire déjà pas mal de choses, mais
jusqu'où ?
Les standards du web nous disent que c'est sûr. Après, il est possible que
tel ou tel client ait un bug à ce niveau, mais je n'en ai jamais entendu
parler,
et j'ai tendance à penser que ce genre de bug serait de toutes
façons repéré bien avant la publication du client en question.
Je suppose que la chaîne obtenue du client dans cet exemple était au départ
« gnagna<SCRIPT>....</SCRIPT>gnagnagna », n'est-ce pas ?
Toutafé.
my $mes_data = $document->createElement("MES_DATA");
$mes_data->appendText($client_text);
Or la méthode appendText remplacera convenablement les caractères actifs.
Comme les données offensives sont toutes, originalement, dans
le monde « chaîne de caractères » et que le seul point de sortie est dans le
monde « arbre XML », on a la garantie que toutes ces données offensives
passent à un moment ou à un autre à la validation.
- investir dans des serveurs plus puissants ;
- investir dans des programmeurs plus compétents.
Les deux coûtent, évidemment. Mais après tout, il faut bien se donner les
moyens de ses objectifs.
:-))) La première solution coutera bien moins cher à court terme que la
Pas tant que ça : je prends un exemple simpliste, disons que la chaîne
<script> est considérée comme le seul début possible de code offensif
alors il suffit de détecter cette chaîne pour savoir qu'on a du code
pourri. Libre à chacun derrière de coller du htmlentities() pour s'en
débarrasser, de faire un coup de regexp, bref, chacun sa méthode.
Et ce faisant tu définis que les caractères offensifs sont dans les
séquences <script> et </script> et c'est ça qui me semble être le plus
important.
Là en revanche je crains que tu ne frises la crise d'optimisme forcené,
si les applications étaient testées avant d'être mises en production, ça
se saurait ;-))
Gasp. Mais c'est une horreur ce truc. De quel droit cette méthode àla
con s'abroge-t-elle le droit de tripoter mes données ? Enfin bon c'est
un autre soucis.
Ok donc en fait le désamorçage se fait parce que les caractères actifs
du HTML/scripting offensif sous html sont en première approche les mêmes
que ceux du XML et parce que la méthode "kivabien" purge.
D'accord, là je comprends mieux.
Pas tant que ça : je prends un exemple simpliste, disons que la chaîne
<script> est considérée comme le seul début possible de code offensif
alors il suffit de détecter cette chaîne pour savoir qu'on a du code
pourri. Libre à chacun derrière de coller du htmlentities() pour s'en
débarrasser, de faire un coup de regexp, bref, chacun sa méthode.
Et ce faisant tu définis que les caractères offensifs sont dans les
séquences <script> et </script> et c'est ça qui me semble être le plus
important.
Là en revanche je crains que tu ne frises la crise d'optimisme forcené,
si les applications étaient testées avant d'être mises en production, ça
se saurait ;-))
Gasp. Mais c'est une horreur ce truc. De quel droit cette méthode àla
con s'abroge-t-elle le droit de tripoter mes données ? Enfin bon c'est
un autre soucis.
Ok donc en fait le désamorçage se fait parce que les caractères actifs
du HTML/scripting offensif sous html sont en première approche les mêmes
que ceux du XML et parce que la méthode "kivabien" purge.
D'accord, là je comprends mieux.
Pas tant que ça : je prends un exemple simpliste, disons que la chaîne
<script> est considérée comme le seul début possible de code offensif
alors il suffit de détecter cette chaîne pour savoir qu'on a du code
pourri. Libre à chacun derrière de coller du htmlentities() pour s'en
débarrasser, de faire un coup de regexp, bref, chacun sa méthode.
Et ce faisant tu définis que les caractères offensifs sont dans les
séquences <script> et </script> et c'est ça qui me semble être le plus
important.
Là en revanche je crains que tu ne frises la crise d'optimisme forcené,
si les applications étaient testées avant d'être mises en production, ça
se saurait ;-))
Gasp. Mais c'est une horreur ce truc. De quel droit cette méthode àla
con s'abroge-t-elle le droit de tripoter mes données ? Enfin bon c'est
un autre soucis.
Ok donc en fait le désamorçage se fait parce que les caractères actifs
du HTML/scripting offensif sous html sont en première approche les mêmes
que ceux du XML et parce que la méthode "kivabien" purge.
D'accord, là je comprends mieux.