Ver Mensaje Individual
  #17 (permalink)  
Antiguo 02/06/2014, 20:14
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 9 meses
Puntos: 320
Respuesta: Caracteres ">" y "<" en url generan un "Forbidden"

Yeahhhhhh lo solucionedesde php!!

Explico la resolución, gracias a todos por la ayuda!

El problema: la url que queria hacer andar era test-bla-bla-4>3-y-3<6 y el htaccess estaba esto:
Código Apache:
Ver original
  1. Options +FollowSymLinks
  2. RewriteEngine on
  3.  
  4. RewriteRule ^test-(.*)$ index.php?token=$1
pero si accedia por esa url de forma directa o por su urlencode (test-bla-bla-4%3E3-y-3%3C6) obtenia un 403, esto se debe a son caracteres protegidos como menciona @lolainas no pueden aparecer en la url.

El secreto: Los caracteres escapados, son decodificados 2 veces no 1 como se piensa de forma intuitiva, la primera vez, es el mod_rewrite quien escapa los caracteres, y la segunda es php cuando arma el array de $_GET.

La solucion: Encodear dos veces de forma recursiva, de esta forma se puede pasar a cualquier carácter, ya que el segundo encode, no deja rastros del primero.

Código PHP:
Ver original
  1. <?php
  2.     var_dump($_GET);
  3.    
  4.     $foo = 'bla-bla-4>2-y-3<6';
  5.     $foo_encoded = urlencode(urlencode($foo));
  6. ?>
  7. <a href="test-<?=$foo_encoded;?>">test-<?=$foo_encoded;?></a>

Accediendo por index.php
Cita:
array (size=0)
empty
test-bla-bla-4%253E2-y-3%253C6
Accediendo por test-bla-bla-4%253E2-y-3%253C6
Cita:
array (size=1)
'token' => string 'bla-bla-4>2-y-3<6' (length=17)
test-bla-bla-4%253E2-y-3%253C6
con lo cual el problema esta solucionado, muchas gracias.

saludos.

Edito:
Como nota off-topic, es posible hacer esto mismo desde javascript:
Código Javascript:
Ver original
  1. var foo = 'test-bla-bla-4>2-y-3<6';
  2. location.href = encodeURIComponent(encodeURIComponent(foo));
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 02/06/2014 a las 20:39