Quel est le point-virgule réservé dans les Url?
La RFC 3986 URI: Syntaxe Générique spec listes un point-virgule comme réservé (sous-delim) caractère:
reserved = gen-delims /sub-delims
gen-delims = ":" /"/" /"?" /"#" /"[" /"]" /"@"
sub-delims = "!" /"$" /"&" /"'" /"(" /")"
/"*" /"+" /"," /";" /"="
Qu'est-ce que la réserve de l'objectif de l' ";" du point-virgule dans les Uri? D'ailleurs, quel est le but de tous les autres sous-delims (je ne suis au courant de fins "&", " + " et "=")?
Vous devez vous connecter pour publier un commentaire.
Il y a une explication à la fin de la section 3.3.
En d'autres termes, il est réservé pour que les gens qui veulent une liste délimitée par des virgules de quelque chose dans l'URL peut utiliser en toute sécurité
;
comme un délimiteur, même si les parties contiennent des;
, tant que le contenu est pour cent codé. En d'autres termes, vous pouvez faire ceci:et de l'interpréter en trois parties:
foo
,bar
,baz;qux
. Si le point-virgule n'ont pas un caractère réservé, le;
et%3b
serait équivalent afin de l'URI peut être mal interprété comme quatre parties:foo
,bar
,baz
,qux
.;
dans les Url HTTP?L'intention est claire si l'on remonte à les anciennes versions du cahier des charges:
Je crois qu'il a ses origines dans FTP URIs.
La Section 3.3 couvre ce - il est opaque délimiteur un URI-la production de l'application peut utiliser si commode:
Il y a des conventions autour de son utilisation actuelle qui sont intéressants. Ils parlent de quand utiliser un point-virgule ou une virgule. Dans le livre "les Services Web RESTful":
Depuis 2014 des segments de tracé sont connus pour contribuer à Traduit de Téléchargement de Fichier attaques. Imaginons que nous avons un vulnérables à une API qui reflète ce que nous envoyez (l'URL était réel, apparemment, maintenant corrigé):
Maintenant, c'est sans danger dans un navigateur comme c'est JSON, donc il ne va pas être affiché, mais le navigateur plutôt d'offrir à télécharger la réponse sous forme d'un fichier. Maintenant, voici le chemin d'accès segments de venir aider (pour l'attaquant):
Tout entre les points-virgules (
;/setup.bat;
) sera pas envoyé au service web, mais au lieu de cela, le navigateur va interpréter ça comme nom de fichier pour enregistrer l'API de réponse. Maintenant, un fichier appelésetup.bat
sera téléchargé et exécuté sans demander au sujet des dangers de l'exécution des fichiers téléchargés à partir d'Internet (car il contient le mot"setup"
dans son nom). Le contenu sera interprétée comme un fichier de commandes Windows, et lecalc.exe
commande sera exécutée.Prévention:
Content-Disposition: attachment; filename="whatever.txt"
sur les Api qui ne sont pas rendus; Google manquait lefilename
partie qui fait effectivement l'attaque plus facileX-Content-Type-Options: nosniff
en-tête de l'API réponsesJ'ai trouvé la suite de cas d'utilisation:
Ses le dernier caractère d'une entité HTML:
https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references
Apache Tomcat 7 (ou des versions plus récentes?!) nous comme
path parameter
:https://superevr.com/blog/2011/three-semicolon-vulnerabilities
Schéma d'URI divise par le MIME et de données:
https://en.wikipedia.org/wiki/Data_URI_scheme
Et il y avait un bug dans IIS5 et IIS6 de contourner fichier des restrictions de téléchargement:
https://www.owasp.org/index.php/Unrestricted_File_Upload
Conclusion:
Ne pas utiliser des points-virgules dans les Url ou ils pourraient accidentellement produire une entité HTML ou schéma d'URI.