Herramientas de desarrollo · Codificador y decodificador de URL
Codificar una URL de redireccionamiento dentro de un parámetro de consulta sin dividirlo
· Cómo funciona
codificación de URL parámetros de consulta seguridad oauth
Anidar una URL dentro de otra es el lugar más común en el que la codificación porcentual falla. Esta publicación muestra por qué las URL internas ?, & y = deben codificarse, cómo hacerlo y cómo verificar el resultado.
El enlace de retorno que eliminó la mitad de sus parámetros: una URL interna y absorbida por la cadena de consulta externa
El enlace de retorno que eliminó la mitad de sus parámetros es un patrón de depuración que todo desarrollador encuentra. Un usuario inicia sesión, la aplicación intenta redirigir a ?next=https://example.com/page?id=1&user=alice, y termina en example.com/page?id=1. El signo comercial en la URL interna se analizó como un separador entre los parámetros de consulta externos. Dos URL con delimitadores diferentes significan que la interna debe estar codificada.
Al anidar una URL dentro de otra como parámetro de consulta, esa dirección interna se convierte en datos opacos para la capa externa. El signo de interrogación, el signo igual y el signo igual no deben ser legibles como delimitadores estructurales. La codificación porcentual los transforma: ? se convierte en %3F y se convierte en %26, = se convierte en %3D. Luego, el analizador externo trata la cadena codificada como un valor de parámetro.
Dos URL, dos conjuntos de delimitadores: por qué la URL interna es solo un valor para la externa
encodeURIComponent en la URL interna completa produce protección completa: encodeURIComponent("https://example.com/a?b=1&c=2") devuelve "https%3A%2F%2Fexample.com%2Fa%3Fb%3D1%26c%3D2". Cada carácter estructural se convierte en notación %XX para que el analizador externo no pueda malinterpretar los delimitadores anidados. Un enfoque competitivo como encodeURI deja barras diagonales y signos de interrogación intacto, reintroduciendo la ambigüedad cuando ese resultado se convierte en un valor de consulta.
El servidor decodifica exactamente una vez. Después de extraer el siguiente parámetro, una única llamada a decodeURIComponent restaura la URL interna a su forma original. Al analizar el resultado como una nueva cadena de consulta, se ve la estructura de parámetros correcta. La doble decodificación es un riesgo cuando el mismo valor pasa por varias capas; %26 se convierte en & después de una decodificación y permanece & después de la segunda.
encodeURIComponent en toda la URL interna: ¿qué se codifica, incluidos :, / y?
La regla básica es simple: cualquier carácter que tenga significado en la sintaxis de la URL, incluido : /? = & #, debe estar codificado en porcentaje cuando aparece en un valor de parámetro de consulta. Esto garantiza que el analizador externo solo vea la estructura de parámetros que deseaba y no ningún delimitador accidental oculto dentro del valor que está pasando. Utilice encodeURIComponent para manejar esta codificación de forma completa y confiable.
Pruebe esta codificación en codificador y decodificador de URL: pegue la URL interna, codifíquela en modo de valor, observe la salida %XX. Utilice el modo decodificador para verificar que el viaje de ida y vuelta coincida exactamente. Esta herramienta demuestra la codificación de un extremo a otro para que pueda copiar los resultados directamente en el código de su aplicación con confianza.
Ejemplo resuelto: compilar ?next=https://example.com/a?b=1&c=2 correctamente: la cadena codificada y la decodificación en el lado del servidor
Un límite de seguridad crítico se encuentra junto a la codificación. El servidor debe validar que el destino decodificado sea realmente seguro para redirigir al destino. La codificación porcentual hace que la estructura de la URL sea inequívoca; no hace que las URL arbitrarias sean seguras. Las vulnerabilidades de redireccionamiento abierto ocurren cuando las aplicaciones siguen ciegamente las URL proporcionadas por el usuario. La validación requiere una lista de permitidos explícita, verificación de dominio o confirmación del usuario.
La codificación soluciona el problema de análisis; La validación soluciona el problema de seguridad. Estas son preocupaciones separadas en diferentes niveles. El codificador y decodificador de URL demuestra la codificación correctamente. Un servidor debe agregar validación: comparar con una lista, verificar el dominio o solicitar confirmación. Sin validación, una redirección correctamente codificada a cualquier dominio sigue siendo explotable.
Riesgo de redireccionamiento abierto: por qué el servidor debe validar el destino decodificado, no solo decodificarlo
Los errores comunes se acumulan aquí. A veces, los desarrolladores codifican solo la parte de la consulta, sin modificar las barras, lo que rompe la estructura. Otros codifican todo el parámetro construido, incluido ?next=, creando una doble codificación. Algunos verifican la validez analizando sin decodificar, leyendo mal la estructura codificada. Construir con encodeURIComponent garantiza coherencia y corrección en todos los casos.
Otro error común es confiar en que el navegador corrija automáticamente un parámetro con formato incorrecto. Las URL son datos y deben tratarse precisamente como datos. encodeURIComponent es la herramienta estándar para este trabajo. El codificador y decodificador de URL mantiene este proceso local para que pueda verificar los bytes exactos antes de enviarlos a producción.
Errores comunes: codificar solo la parte de la consulta o confiar en el navegador para solucionarlo
Los parámetros de redirección_uri de OAuth siguen exactamente este mismo patrón. El servidor de autorización pasa el control a un cliente en una dirección conocida, a menudo una URL completa con múltiples parámetros. Codificarlo como un valor único garantiza que los parámetros sobrevivan al transporte y que el cliente los decodifique una vez antes de su uso. La codificación mal manejada en los flujos de OAuth hace que los tokens y los parámetros de devolución de llamada desaparezcan a mitad de la transmisión.
Los parámetros de estado en OAuth utilizan codificación combinada con firmas criptográficas para protección CSRF. Los identificadores de fragmentos permanecen en el lado del cliente y nunca viajan al servidor. Los tokens de portador nunca deben colocarse en URL de redireccionamiento, independientemente de la codificación, porque las URL aparecen en los registros, el historial del navegador y los encabezados de referencia.
Lo que esto no cubre: parámetros de estado de OAuth y diseño de protección CSRF
Estrategia de prueba: construya su URL interna con parámetros reales, codifíquela como un valor externo, decodifíquela en el código de recepción. Verifique que el resultado decodificado sea byte por byte idéntico al original. Utilice el codificador y descodificador de URL antes de la implementación en producción. Examine el tráfico y los registros de la red para confirmar la llegada correcta y que no se trunquen ni alteren los datos codificados.
Un error tipográfico como %2e en lugar de %2E podría descodificarse correctamente pero fallar las comprobaciones de ida y vuelta en sistemas secundarios que esperan coherencia. Las discrepancias de codificación entre bibliotecas de diferentes plataformas son raras pero posibles; probar el recorrido completo de ida y vuelta los detecta antes de que causen problemas de producción y quejas de los clientes.
Conclusión: trate la URL interna como datos: cómo el modo de valor único del codificador y decodificador de URL la codifica completamente y su decodificador confirma el viaje de ida y vuelta
El límite de codificación es claro: encodeURIComponent trata su entrada como datos opacos y escapa de todos los caracteres excepto la puntuación no reservada, lo que hace que sea seguro anidar en cualquier capa de URL. El límite de validación es independiente: después de la decodificación, verifique que el destino sea el lugar al que el usuario pretendía ir. Utilice el codificador y decodificador de URL para ver la codificación demostrada de principio a fin.
Trate la URL interna como datos desde el principio. Codifíquelo como un valor de consulta único, decodifique exactamente una vez cuando lo reciba y luego aplique la validación antes de redirigir. El codificador y decodificador de URL muestra el porcentaje de codificación de cualquier URL completa como un valor de consulta único y verifica los viajes de ida y vuelta localmente. Tanto la codificación como la validación son esenciales; esta herramienta maneja la codificación correctamente.