Je dois construire une forme d'action qui vous ramène à exactement la même page - obtenir des paramètres inclus. Je pense que je peux dire quelque chose à l'effet de: Ceci semble fonctionner et tester le passage d'une couple d'attaques XSS semble réussir, car la sortie de Query_string semble être une URL codé. Cependant, le documentation PHP ne mentionne pas cela, alors je suis Pas convaincu que je peux faire confiance à ce comportement. P> est-il sûr d'utiliser Query_string comme je suis au-dessus? Sinon, que puis-je faire à la place? Les références à la documentation seraient appréciées. P> Mise à jour forte> commutée sur script_name, juste mélangé lequel était ok et qui était mauvais dans ma tête, merci de m'attaquer. action = "" code> résout mon problème spécifique joliment, mais je suis toujours curieux si Query_string est pré-traité, il est donc prudent d'utiliser ou non, car il y a d'autres fois que vous voudrez peut-être ré- Utilisez la chaîne de requête, en supposant que c'est sûr de le faire. P> P>
5 Réponses :
Tout d'abord, vous ne pouvez pas faire confiance $ $ _Server ['php_self'] ( 1 ) - Utilisez $ _Server [" script_name "] à la place. p>
Comme pour $ _Server ['Query_string'], vous devez le traiter comme une autre entrée utilisateur. Filtrez-le avant de l'utiliser dans votre sortie. Je ne recommanderais pas une sorte de filtre général dans ce cas. Il serait préférable de réassembler la chaîne de requête à partir de pièces spécifiques que vous attendez d'être là. P>
S'il est exploitable par XSS, vous devez d'abord savoir quelle attaque. Dans le code Publié ici, il n'y a qu'un Attaque simple en utilisant le php_self. p>
Mais, pour éviter tout problème, vous pouvez simplement laisser l'action de formulaire en blanc. Cela enverra le formulaire à la même page, y compris la chaîne de requête. P>
Je ne peux pas penser à aucune attaque qui fonctionnerait hors main, mais Pourquoi ne pas simplement quitter le paramètre code> action code> vide et laisser le navigateur décider? Vous pouvez utiliser JavaScript pour appliquer correctement ce comportement sur le côté client si vous souhaitez être doublement sûr. P> php_self code> est vulnérable et que vous utilisez
Query_string code> sans filtrage quel que ce soit, ce qui semble impair. p>
Vous ne devez jamais faire confiance à $ _Server ['Query_string'] car il peut être utilisé pour les attaques XSS.
Dans votre cas, on pourrait exploiter la vulnérabilité avec: P>
http://your.server.com/your_script.php?"><script>alert(111);</script>
Merci, / ceci / est ce que je demandais. Nous ne pouvons pas faire confiance à la variable car il est content de dépendre du navigateur, excellent.
+1 Veuillez noter l'élément d'information important. Ce n'est pas que vous ne pouvez pas utiliser i> les données; C'est seulement que vous ne pouvez pas confiance i> it :)
Ceci est un autre de ces instances où utiliser PHPS Ceci est dû aux raisons indiquées ci-dessus - vous dites que vous faites confiance aux données externes, quand, si elle peut être entrée ou manipulée. Par les utilisateurs, vous ne pouvez pas. p> lire plus ici p> p> filtre_input code> est la voie à suivre. Mon IDE Netbeans (déteste ou l'aimer) se plaint toujours chaque fois que j'ouvre du code qui accède à
$ _ Post code>,
$ _ get code>,
$ _ / code> et
et
$ _ Cookie code> directement sans passer par
filtre_input code>.
N'assume jamais. Vous ne savez jamais ce que ces escrocs peuvent venir!
Bien sûr que non :) c'est les valeurs brutes de l'URI
Si vous souhaitez soumettre votre utilisateur à la même page, vous n'avez même pas besoin de spécifier quelle action ...
Pourquoi ne pas simplement laisser l'action de formulaire en blanc? Cela enverra un message à la même page, y compris la QueryString.
Vous savez
php_self code> est vulnérable, non? Comme les commentaires ci-dessus disent qu'il est préférable de quitter l'action en blanc.
Faire des
Action Code> Blank ne signifie pas que vous êtes à l'abri des attaques XSS supposées, mais cela vous donne le même comportement.