Pourquoi utiliser urlencode?

je suis en train d'écrire une application web et d'apprendre à urlencode liens html...

toutes les questions du urlencode ici (voir la balise ci-dessous) sont "comment faire...?" question.

Ma question n'est pas "Comment?"mais "Pourquoi?".

même l'article de wikipedia ne traite que de la mécanique de celui-ci:

http://en.wikipedia.org/wiki/Urlencode mais pas pourquoi je devrais utiliser urlencode dans mon application.

Ce qui sont les sécurité implications de l'utilisation (ou plutôt de ne pas l'utiliser) urlencode?

comment un défaut d'utiliser urlencode peut-il être exploités?

Quel genre de bugs ou les échecs peuvent apparaître avec des urls non codées?

je demande parce que même sans urlencode, un lien vers mon site Web de développement d'application comme les suivants fonctionne comme prévu: http://myapp/my%20test/ée/ràé

Pourquoi devrais-je utiliser urlencode?

Ou une autre façon de le dire:

Quand devrais-je utiliser urlencode? Dans quel genre de situation?

44
demandé sur augustin 2011-01-12 13:55:38

5 réponses

mise à Jour: il y a une explication encore meilleure (imo) plus haut:

une URI est représentée comme une séquence de caractères, et non comme une séquence d'octets. C'est parce que URI pourrait être "transportée" par des moyens que ne sont pas par l'intermédiaire d'un réseau informatique, p.ex. imprimés sur du papier, lus la radio, etc.

et

pour les séquences de caractères originales qui contiennent des caractères non ASCII, cependant, l' la situation est plus difficile. Les protocoles internet qui transmettre des séquences d'octets destinées à représenter des séquences de caractères devraient fournir un moyen d'identifier le jeu de caractères utilisé, si il pourrait y en avoir plus d'un [RFC2277]. Toutefois, il existe actuellement aucune disposition dans la syntaxe URI générique pour accomplir ceci identification. Un système D'URI individuel peut exiger un charset, définir un charset par défaut, ou fournir une façon d'indiquer charset utiliser.


parce que c'est indiqué dans le RFC:

2.4. Séquences D'Évasion

les données doivent être échappées si elles n'ont pas de représentation caractère sans réserve; Cela inclut des données qui ne correspondent pas à un caractère imprimable du jeu de caractères codés US-ASCII, ou correspond à tout caractère US-ASCII qui est refusé, comme expliquer dessous.

et

2.4.2. Quand à s'Échapper et ne pas encoder

une URI est toujours dans une forme" échappée", depuis échapper ou désamorcer un URI complété pourrait changer sa sémantique. Normalement, le seul le temps des codages d'évacuation peuvent être réalisés en toute sécurité lorsque L'URI est créé chaque composant peut avoir son propre jeu de caractères qui sont réservés, donc seul le mécanisme responsable de générer ou l'interprétation de ce composant peut déterminer si échapper à un personnage va changer sa sémantique. De même, a URI doit être séparé dans ses composants avant les caractères échappés à l'intérieur de ces composants peuvent être décodés en toute sécurité.

dans certains cas, des données qui pourraient être représentées par une le caractère peut sembler échappé; par exemple, certains des certains systèmes échappent automatiquement aux caractères" mark". Si l' compte tenu de URI le schéma définit un algorithme de canonisation, puis les caractères sans réserve peuvent être non-enregistrés selon cet algorithme. Par exemple, "%7e" est parfois utilisé à la place de " ~ " dans une URL http chemin, mais les deux sont équivalents pour une URL http.

parce que le caractère de pourcentage " % " a toujours le but réservé de étant l'indicateur de fuite, il doit être échappé en tant que "%25" afin de doit être utilisé comme données dans une URI. Les implémenteurs devraient être prudent de ne pas échapper ou détacher la même ficelle plus d'une fois, depuis le désenclavement une corde déjà Non escapade pourrait conduire à mal interpréter un pour cent le caractère de données comme un autre caractère échappé, ou vice versa dans le cas d'évasion d'une corde déjà échappée.

11
répondu Felix Kling 2011-01-12 11:15:59

il y a des RFC (http://www.faqs.org/rfcs/rfc1738.html et ainsi de suite) qui définissent le format des URLs, et les développeurs de navigateurs/serveurs web s'appuient sur cette norme pour interpréter les données. Si vous ne vous conformez pas, les résultats peuvent être imprévisibles.

url HTTP a sa spécification, et il stipule que pratiquement tous les caractères non latins doivent être encodés.

4
répondu Dennis Kreminsky 2011-01-12 11:01:13

Deux raisons je pense:

  • Cela dépend vraiment de la façon dont vous analyser votre requête côté serveur. Par exemple: passer des paramètres en utilisant la requête GET de HTTP posera des problèmes s'il y a des caractères comme & à l'intérieur d'un paramètre.
  • il vous permet de gérer les caractères non-ansi de la manière que vous souhaitez (vous dictez l'encodage). Sinon, le navigateur pourrait les passer dans un encodage aléatoire (ne pensez pas qu'il est vraiment défini dans n'importe quel standard; corrigez-moi si je suis mauvais.)
3
répondu Mario 2011-01-12 11:02:37

La raison principale est l'essentiel s'échappe caractères à inclure dans L'URL de votre page web.

supposons qu'un utilisateur entre un champ de formulaire Utilisateur en tant que "& joe" et que nous souhaitions rediriger vers une page qui contient ce nom comme partie de L'URL, en utilisant L'encodage de L'URL, ce serait alors, par exemple:

localhost/index.php?name=%26joe //note how the ampersand is escaped

si vous n'utilisez pas urlencoding, vous finirez avec:

localhost/index.php?name=&joe
3
répondu Dean P 2017-11-27 16:41:45

Comment allez-vous distinguer si vos deux de chemin sont comme ceci

http://myapp/my%20test/

et

http://myapp/my test/

Remarque: space & %20 est partie de l'URL.

2
répondu hungryMind 2011-01-12 11:01:49