2010-05-14 4 views
2

Je récupère une URL encodée via une chaîne querys. Je dois le passer à nouveau à la page suivante. Quand je récupère la première fois, en utilisant $_REQUEST['url'], seules les barres obliques sont décodés, par exemple:

http://example.com/search~S10?/Xllamas&searchscope=10&SORT=D/Xllamas&searchscope=10&SORT=D&SUBKEY=llamas/51%2C64%2C64%2CB/browse

Le php docs page for urldecode données déconseille les demandes de décodage, et dit qu'il sera déjà décodé. J'en ai besoin soit complètement décodé, donc je peux le coder à nouveau sans double codage de certaines parties, ou pas décodé du tout.

Je ne sais pas pourquoi mon expérience de ces données est incongrue avec les documents php. Appréciez toute aide ou pointeurs à la même chose !!

EDIT: tentative d'afficher le code correspondant, qui est dispersée sur:

l'URL est encodée et ajouté à la chaîne de requête (dans un fichier HTML en utilisant Smarty):
<a class="button" href="{$baseurl}search_nojs?searcharg={$searcharg|escape:'url'}&url={$next|escape:'url'}"><span>Next&gt;&gt;</span></a>

si ce lien a été suivi, je suis preneuse l'url de retour de la chaîne de requête (dans un fichier php):

 if(array_key_exists('url', $_REQUEST)) { 
      $sm->assign("searchurl", $_REQUEST['url']); 
     } 

Je voudrais coller l'url de nouveau dans la chaîne de requête pour le lien suivant (dans un autre fichier html):
href="{$baseurl}detail?bibid={$res.bibid}&searcharg={$searcharg}{if $searchurl}&searchurl={$searchurl}{/if}"

Je également l'impression {$searchurl} directement sur la page, et d'obtenir la même demi résultat échappé.

Voici un autre exemple de la chaîne de requête par rapport à des données que je reçois de $_REQUEST:

URL codé à l'origine dans querystring:
searcharg=mammals&url=http%3A%2F%2Fexample.com%2Fsearch%7ES10%3F%2FXmammals%26searchscope%3D10%26SORT%3DD%2FXmammals%26searchscope%3D10%26SORT%3DD%26SUBKEY%3Dmammals%2F51%252C1114%252C1114%252CB%2Fbrowse

données extraites de $_REQUEST:
searcharg=mammals&searchurl=http://example.com/search~S10?/Xmammals&searchscope=10&SORT=D/Xmammals&searchscope=10&SORT=D&SUBKEY=mammals/51%2C1114%2C1114%2CB/browse

I savoir cette méthode peut sembler curieux - j'essaie de faire un affichage mobile, en travaillant autour d'une base de données boîte noire. Merci encore pour toute aide !!

+0

Êtes-vous sûr? Qu'est-ce que par exemple Firebug dit que l'URL que vous demandez est? –

+0

Pouvez-vous poster du code? –

+0

J'ai ajouté quelques informations supplémentaires; J'espère que cela donnera un contexte. merci y'all! –

Répondre

1

Voici un autre exemple de la chaîne de requête par rapport à des données que je reçois de $ _REQUEST:

URL codé à l'origine dans querystring: searcharg = mammifères & url = http% 3A% 2F% 2Fexample. com% 2Fsearch% 7ES10% 3F% 2FXmammals% 26searchscope% 3D10% 26SORT% 3DD% 2FXmammals% 26searchscope% 3D10% 26SORT% 3DD% 26SUBKEY% 3Dmammals% 2F51% 252C1114% 252C1114% 252CB% 2Fbrowse

C'est le double encodé. Par exemple: %252C -> %2C -> , Ainsi, au moment d'encoder le paramètre url, vous introduisez le double encodage. Peut-être devriez-vous vous assurer, avant d'encoder les paramètres, de les décoder jusqu'à ce qu'ils ne puissent plus être décodés (aka canonisation). Vous pouvez utiliser urldecode dans une boucle pour cela.

Vous devez également vous assurer que lorsque vous remettez le paramètre url dans le contexte html (en tant que lien) que vous échappez également aux attributs HTML. Sinon, vous avez une vulnérabilité XSS.

+0

Cela semble très utile, je vais travailler dessus sous cet angle. –

+0

J'ai trouvé l'endroit où il devait être décodé lors de la première récupération. Merci beaucoup, jah! Je vais garder à l'esprit votre autre conseil, aussi. –

0

Le comma (U+002C) is a reserved character in the query et doit donc être encodée avec %2C:

3,4. Le composant de requête est une chaîne d'informations à interpréter par la ressource.

query   = *uric 

Au sein d'un composant de requête, les caractères ";", "/", "?", ":", "@", "&", "=", "+", "," et "$" sont réservés.

+0

Je ne vois pas de virgule dans son URL, mais il a une barre oblique dans le nom de la première variable et dans certaines valeurs, ce qui pourrait causer des problèmes. – arnorhs

+0

Gumbo: est-ce que cela signifie que je pourrais utiliser urldecode? (p.s. info supplémentaire ajouté à la question) –

Questions connexes