Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Caracteres ">" y "<" en url generan un "Forbidden"

Estas en el tema de Caracteres ">" y "<" en url generan un "Forbidden" en el foro de PHP en Foros del Web. Buenas gente, tengo un problema, necesito enviar por url los caracteres ">" y "<" pero no puedo, desconozco el porque y buscando en san google ...
  #1 (permalink)  
Antiguo 01/06/2014, 22:11
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Caracteres ">" y "<" en url generan un "Forbidden"

Buenas gente, tengo un problema, necesito enviar por url los caracteres ">" y "<" pero no puedo, desconozco el porque y buscando en san google no encuentro que se haga mencion a esto, en fin, tengo esta regla en htaccess:

Código Apache:
Ver original
  1. RewriteRule ^test-(.+)$   index.html

La cual funciona bien si pongo test-blablabla pero si pongo test-babla1<2bla me dice:

Cita:
Forbidden
You don't have permission to access test-babla1<2bla on this server.
Probe a encodear pero da lo mismo, obtengo el mismo resultado. ¿Alguien sabe porque ocurre y como solucionarlo?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #2 (permalink)  
Antiguo 01/06/2014, 22:26
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Caracteres ">" y "<" en url generan un "Forbidden"

¿Y si le aplicas la función htmlentities para convertir esos caracteres en entidades HTML?
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 01/06/2014, 22:46
lolainas
Invitado
 
Mensajes: n/a
Puntos:
Sólo pueden pasar como parte de la query hasta donde tengo entendido.
  #4 (permalink)  
Antiguo 02/06/2014, 00:49
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Caracteres ">" y "<" en url generan un "Forbidden"

Alexis88 He probado y da el mismo problema, lo extraño es que no es un 404 o un 500, sino un Forbidden con lo cual sospecho que es algo del server pero no tengo idea que.

lolainas En efecto, si el caracter aparece en la "query" como tu le llamas, no hay problema, por ejemplo esta url no da error: test-blablabla?hola=1<2 pero no me sirve, tiene que poder ir en cualquier parte
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #5 (permalink)  
Antiguo 02/06/2014, 05:49
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Respuesta: Caracteres ">" y "<" en url generan un "Forbidden"

@NSD: no tengo tu .htaccess completo pero sin este a mi me funciona perfecto.......asi que es diria que es tu .htaccess no esta correcto o no se admite alguno de esos caracteres por tener quizas algun significado especial

Coincido con @Alexis que si haces:

$foo_encoded = urlencode(htmlentities($foo));
$al_recibir = urldecode(html_entity_decode($_GET['foo']));


No deberias tener ningun problema... y que en todo caso es algo que tiene de malo tu .htaccess ... sino es una brutalidad existiendo esas funciones pero puedes hacer tu propia funcion de sustitucion y aplicarla antes que urlencode()
__________________
Salu2!

Última edición por Italico76; 02/06/2014 a las 06:00
  #6 (permalink)  
Antiguo 02/06/2014, 10:55
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Caracteres ">" y "<" en url generan un "Forbidden"

Italico76 gracias por la respuesta, mi .htaccess tiene solo esa linea:

Código Apache:
Ver original
  1. Options +FollowSymLinks
  2. RewriteEngine on
  3.  
  4. RewriteRule ^test-(.+)$   index.html

Los caracteres "<" y ">" no son caracteres especiales y no precisan ser escapados por ninguna via, aun asi, esta url: test-babla1%3C2bla donde "%3C" es "<" tambien da un forbidden.

Estoy usando Wampserver en windows, apache 2.2.22.

Cada vez que intento acceder a la url en el access.log me trackea esta linea:
Cita:
127.0.0.1 - - [02/Jun/2014:13:53:07 -0300] "GET /test-babla1%3C2bla HTTP/1.1" 403 229
obviamente, variando la fecha y hora.

Quizas sea algun problema de mi servidor o una configuracion mala, me podrias por favor facilitar tu version de apache y la linea del log que te genera a ti para comparar? muchas gracias
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #7 (permalink)  
Antiguo 02/06/2014, 11:54
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Respuesta: Caracteres ">" y "<" en url generan un "Forbidden"

A mi no me da error de nada........pero con > o < ya no lo toma para redireccion ni asi:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $foo = 'bla bla <b>Hello World!</b>';
  4. $foo_encoded = urlencode(htmlentities($foo));
  5. ?>
  6. <a href="<?= 'http://localhost/pruebas/test-'.$foo_encoded; ?>">Enlace</a>
__________________
Salu2!
  #8 (permalink)  
Antiguo 02/06/2014, 12:07
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Respuesta: Caracteres ">" y "<" en url generan un "Forbidden"

Te toco escribir el decode() pero al menos asi funciona:

Código PHP:
Ver original
  1. <?php
  2.  
  3. function my_htmlentities($s){
  4.     return str_replace(array('<','>','\\','/'),array('__menor__','__mayor__','__slash__','__diagonal__'),$s);
  5. }
  6.  
  7. $foo = 'bla bla <b>Hello World!</b>';
  8. $foo_encoded = urlencode(htmlentities(my_htmlentities($foo)));
  9.  
  10. var_dump($foo_encoded);
  11. ?>
  12. <a href="<?= 'http://localhost/pruebas/test-'.$foo_encoded; ?>">Enlace</a>
__________________
Salu2!
  #9 (permalink)  
Antiguo 02/06/2014, 16:47
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Caracteres ">" y "<" en url generan un "Forbidden"

Muchas gracias por el interés, tu primer código:
Código PHP:
Ver original
  1. <?php
  2. $foo = 'bla bla <b>Hello World!</b>';
  3. $foo_encoded = urlencode(htmlentities($foo));
  4. ?>
  5. <a href="<?= 'http://localhost/pruebas/test-'.$foo_encoded; ?>">Enlace</a>
funciona de forma aparente, es decir, no me da 403, pero no esta enviando el signo ">" sino un "entitie html" (¿Se llamara asi?...) y no me sirve, fijate esto:

.htaccess
Código Apache:
Ver original
  1. Options +FollowSymLinks
  2. RewriteEngine on
  3.  
  4. RewriteRule ^test-(.*)$ index.php?token=$1

index.php
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(htmlentities($foo));
  6. ?>
  7. <a href="test-<?=$foo_encoded;?>">test-<?=$foo_encoded;?></a>

Acceso por index.php:
Cita:
array (size=0)
empty
test-bla-bla-4%26gt%3B2-y-3%26lt%3B6
Acceso por test-bla-bla-4%26gt%3B2-y-3%26lt%3B6
Cita:
array (size=3)
'token' => string 'bla-bla-4' (length=9)
'gt;2-y-3' => string '' (length=0)
'lt;6' => string '' (length=0)
test-bla-bla-4%26gt%3B2-y-3%26lt%3B6
La segunda funcion, my_htmlentities si bien funciona, me parece demasiado rustica jaja ademas de que no soluciona el problema de pasar un ">" o "<" porque en realidad esta pasando "__menor__" que nunca tubo problema.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #10 (permalink)  
Antiguo 02/06/2014, 17:35
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Caracteres ">" y "<" en url generan un "Forbidden"

Solo por curiosidad, es realmente necesario incluir esos caracteres en la URL?

De hecho, si estás usando URLs amigables, lo más recomendable es evitar el uso de cualquier caracter especial porque, generalmente, deben escaparse para evitar este tipo de problemas.

Luego, se me ocurre que la redirección 403 podría no ser enviada por el servidor, sino por el framework que estás usando; lo cual es sencillo de averiguar si editas el index.php para agregar un die('Aquí no hay redirección'); lo que te dará una pista para buscar la solución.

Edición:

Según recuerdo, algún módulo de seguridad en Apache también podría considerar la presencia de esos caracteres en la URL como intento de ataque.
__________________
- León, Guanajuato
- GV-Foto
  #11 (permalink)  
Antiguo 02/06/2014, 17:40
lolainas
Invitado
 
Mensajes: n/a
Puntos:
Leete esto: http://www.ietf.org/rfc/rfc2396.txt, la sección 2.4.3 excluded us-ascii chars, parece que están excluidos, de momento solo está demostrado que podrías pasarlos por la query string, que por cierto, no es que yo le llame así, se llama así desde antes que tu y yo empecemos a programar.

Saludos.
  #12 (permalink)  
Antiguo 02/06/2014, 19:39
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Respuesta: Caracteres ">" y "<" en url generan un "Forbidden"

@NSD : el foro estubo caido por horas y no pude subir nada pero queria editar mi ultimo post para que pruebes bien... de todas formas quisiera saber por que solo refieres al "primer código" ... no has probado el segundo o por que no te sirve ?

Código PHP:
Ver original
  1. <?php
  2. /*
  3.     Para @NSD
  4. */
  5. function my_encoder($s){
  6.     return str_replace(array('<','>','\\','/'),array('__menor__','__mayor__','__slash__','__diagonal__'),$s);
  7. }
  8.  
  9. function my_decoder($s){
  10.     return str_replace(array('__menor__','__mayor__','__slash__','__diagonal__'),array('<','>','\\','/'),$s);
  11. }
  12.  
  13.  
  14. $foo = 'bla bla <b>Hello World!</b>';
  15. $foo_encoded = urlencode(my_encoder($foo));
  16. ?>
  17. <a href="<?= 'http://localhost/pruebas/test-'.$foo_encoded; ?>">Enlace</a><p/>
  18.  
  19. <?php
  20. var_dump($foo_encoded);
  21. var_dump(urldecode(my_decoder("bla+bla+__menor__b__mayor__Hello+World%21__menor____diagonal__b__mayor__")));

Si lo corres... observaras que envia correctamente y si usas el "decoder" que tambien decodifica sin problemas
__________________
Salu2!
  #13 (permalink)  
Antiguo 02/06/2014, 19:39
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Respuesta: Caracteres ">" y "<" en url generan un "Forbidden"

@NSD : el foro estubo caido por horas y no pude subir nada pero queria editar mi ultimo post para que pruebes bien... de todas formas quisiera saber por que solo refieres al "primer código" ... no has probado el segundo o por que no te sirve ?

Código PHP:
Ver original
  1. <?php
  2. /*
  3.     Para @NSD
  4. */
  5. function my_encoder($s){
  6.     return str_replace(array('<','>','\\','/'),array('__menor__','__mayor__','__slash__','__diagonal__'),$s);
  7. }
  8.  
  9. function my_decoder($s){
  10.     return str_replace(array('__menor__','__mayor__','__slash__','__diagonal__'),array('<','>','\\','/'),$s);
  11. }
  12.  
  13.  
  14. $foo = 'bla bla <b>Hello World!</b>';
  15. $foo_encoded = urlencode(my_encoder($foo));
  16. ?>
  17. <a href="<?= 'http://localhost/pruebas/test-'.$foo_encoded; ?>">Enlace</a><p/>
  18.  
  19. <?php
  20. var_dump($foo_encoded);
  21. var_dump(urldecode(my_decoder("bla+bla+__menor__b__mayor__Hello+World%21__menor____diagonal__b__mayor__")));

Si lo corres... observaras que envia correctamente y si usas el "decoder" que tambien decodifica sin problemas
__________________
Salu2!
  #14 (permalink)  
Antiguo 02/06/2014, 19:40
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Caracteres ">" y "<" en url generan un "Forbidden"

Cita:
Solo por curiosidad, es realmente necesario incluir esos caracteres en la URL?
@Triby Si, no es porque quiera hacerlas amigables, son para un backend que corre offline y los tipos pueden filtrar datos, dentro del filtro pueden ir los caracteres ">" y "<" y estos se tienen que propagar por url.

Cita:
Según recuerdo, algún módulo de seguridad en Apache también podría considerar la presencia de esos caracteres en la URL como intento de ataque.
No recordaras cual es el nombre por casualidad no? voy a investigar porque creo que por este lado viene el problema, ademas @Italico76 afirma que en su servidor no ocurre el 403 asi que de seguro es un modulo o una configuración lo que esta generando esto.

Cita:
Leete esto: http://www.ietf.org/rfc/rfc2396.txt, la sección 2.4.3 excluded us-ascii chars
Interesante, asi que ese es el motivo por el cual no hace falta escaparlos, porque son reservados.
Sin embargo, en el server de @Italico76 funcionan y en este tema de stackoverflow lo usan como parte comun de una url para hacer redirecciones

Cita:
la query string, que por cierto, no es que yo le llame así, se llama así desde antes que tu y yo empecemos a programar.
tienes razon, equivocación mia, no sabia que se llamaba asi, gracias por la aclaracion
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #15 (permalink)  
Antiguo 02/06/2014, 19:52
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Caracteres ">" y "<" en url generan un "Forbidden"

Italico76 Mira que curioso! tu mensaje se publico un minuto antes que el mio, sin embargo si te fijas en el link permanente, el mio tiene un id anterior

volviendo al tema, por la segunda opcion te habia comentado esto:
Cita:
La segunda funcion, my_htmlentities si bien funciona, me parece demasiado rustica jaja ademas de que no soluciona el problema de pasar un ">" o "<" porque en realidad esta pasando "__menor__" que nunca tubo problema.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #16 (permalink)  
Antiguo 02/06/2014, 20:14
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Caracteres ">" y "<" en url generan un "Forbidden"

Bueno, los módulos de seguridad de Apache que conozco son mod_security y mod_security2.

Por cierto, acabo de probar en localhost (con wamp) y también me da el mensaje de error.
__________________
- León, Guanajuato
- GV-Foto
  #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
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
  #18 (permalink)  
Antiguo 03/06/2014, 06:54
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Respuesta: Caracteres ">" y "<" en url generan un "Forbidden"

Cita:
Iniciado por NSD Ver Mensaje
Italico76 Mira que curioso! tu mensaje se publico un minuto antes que el mio, sin embargo si te fijas en el link permanente, el mio tiene un id anterior

volviendo al tema, por la segunda opcion te habia comentado esto:
Lo que pasa es que a mi siempre me coje el Captcha ;-D


Ayer casi no puedo entrar, creo hubo problemas con el server por un cambio de DNSs y mucha congestion


Sabia era necesario hacer otro "encoding" pero jamas hubiera sospechado del mismo tipo, me alegro @lolainas y @Triby te hayan dado buena orientacion y que hayas solucionado
__________________
Salu2!

Última edición por Italico76; 03/06/2014 a las 07:18

Etiquetas: caracteres, html, url
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:02.