Pourquoi est-ce %2B chaîne urldecoded?
[Cela peut ne pas être précisément une question de programmation, mais c'est un casse-tête qui peut être mieux traitées par les programmeurs. J'ai essayé d'abord sur le Pro Webmasters de site, à écrasant silence]
Nous avons une adresse e-mail de vérification des processus sur notre site web. Le site génère d'abord une clé appropriée comme une chaîne de caractères
mykey
Il encode ensuite cette clé comme un tas d'octets
&$dac~ʌ����!
Puis, il base64 encode que des tas d'octets
JiRkYWN+yoyIhIQ==
Depuis cette clé va être donné comme une querystring valeur d'une URL qui doit être placé dans un e-mail HTML, nous devons d'abord URLEncode puis, il HTMLEncode le résultat, nous donnant (il n'y a aucun effet de HTMLEncoding dans le cas de l'exemple, mais je ne peux pas être pris la peine de retravailler l'exemple)
JiRkYWN%2ByoyIhIQ%3D%3D
Ce sont ensuite intégrées dans le code HTML qui est envoyé dans le cadre d'un e-mail, quelque chose comme:
click <a href="http://myapp/verify?key=JiRkYWN%2ByoyIhIQ%3D%3D">here</a>.
Or paste <b>http://myapp/verify?key=JiRkYWN%2ByoyIhIQ%3D%3D</b> into your browser.
Lors de la réception de l'utilisateur clique sur le lien, le site reçoit la demande, des extraits de la valeur de la chaîne de requête paramètre 'key', base64 décode, déchiffre, et fait la bonne chose en termes de la logique du site.
Cependant, à l'occasion, nous avons des utilisateurs qui déclarent que leur cliquant sur est inefficace. Un utilisateur nous a transmis le courriel a été envoyé, et sur l'inspection de l'HTML a été transformé en (à mettre dans les conditions de l'exemple ci-dessus)
click <a href="http://myapp/verify?key=JiRkYWN+yoyIhIQ%3D%3D">here</a>
Or paste <b>http://myapp/verify?key=JiRkYWN+yoyIhIQ%3D%3D</b> into your browser.
Qui est, l' %2B chaîne - mais aucun des autres pourcentage chaînes codées -, avait été transformé en un plus. (C'est certainement laissant nous avec le droit des valeurs - j'ai regardé le journal SMTP).
key=JiRkYWN%2ByoyIhIQ%3D%3D
key=JiRkYWN+yoyIhIQ%3D%3D
Donc je pense que il ya un couple de possibilités:
-
Il y a quelque chose que je fais c'est stupide, que je ne peux pas le voir, ou
-
Certains clients de messagerie convertir %2b chaînes de signes plus, peut-être pour essayer de faire face au problème des personnes qui, à tort, Encodage des signes plus
Dans le cas de 1 - c'est quoi? Dans le cas de 2 - est-il un standard, connue façon de traiter avec ce genre de scénario?
Merci beaucoup pour toute aide
OriginalL'auteur Yellowfog | 2013-09-06
Vous devez vous connecter pour publier un commentaire.
Le problème réside dans cette étape
Votre demande à "l'autre bout" doit manquer une étape de unescaping. Peu importe si il y a un %2B ou un + une fonction comme perls uri_unescape renvoie des réponses cohérentes
Voici ce qui devrait arriver. Tout ce que je suis en montrant les étapes. Je suis à l'aide de perl dans un débogueur. L'étape 54 code de la chaîne base64. L'étape 55 montre comment la chaîne encodée en base64 pourrait être fait dans un uri échappé paramètre. Étapes 56 et 57 sont ce que le client final doit être fait pour décoder.
Une manière de contourner ce problème est de s'assurer que votre base64 "clé" ne contiennent pas de signes plus!
OriginalL'auteur Vorsprung
Ce qui est peut-être ce qui se passe ici est que le URLDecode est en train de tourner la
%2b
dans un+
, ce qui est interprété comme un caractère d'espace dans l'URL. J'ai été en mesure de surmonter un problème similaire en premier urldecoding la chaîne, puis à l'aide d'une fonction remplacer de remplacer les espaces dans la chaîne décodée avec+
de caractères, puis de décrypter le "fixe" de la chaîne.OriginalL'auteur rcoopman