Buscar un cambio de comportamiento para los URL que contienen un signo más

Esta regla marca los URL que contienen un signo más ("+") que no se encuentra en la parte de parámetros de la consulta del URL. En código Java, la regla explora si hay constructores java.net.URL e inspecciona los parámetros utilizados para crear el URL. La regla busca el signo más en el URL, pero no en los parámetros de la consulta. Los parámetros de la consulta incluyen todo lo que se encuentra a la derecha del carácter "?" del URL.

Antes de WebSphere Application Server versión 5.1, cuando se descodificaba un URL, se tomaba todo el URL, no únicamente los parámetros de la consulta. Este comportamiento no era correcto, y se cambió el contenedor web para no tratar el signo más como un carácter especial cuando no estaba en los parámetros de la consulta. Esto provocaba regresiones de la aplicación, y en la versión 5.1.1.11 se añadió una propiedad personalizada de contenedor web que permite controlar el comportamiento de la descodificación del signo más. El comportamiento predeterminado para esta propiedad personalizada es el comportamiento anterior que descodificaba el signo más en cualquier lugar del URL.

Si sus URL contienen un signo más que no se debe descodificar, debe definir la propiedad personalizada de contenedor web com.ibm.ws.webcontainer.decodeURLPlusSign como false. El comportamiento predeterminado es true.

La regla de Java inspecciona los constructores de URL y, si es posible, comprueba los parámetros spec, host y file de los constructores para verificar que no haya signos más. La regla explora los constructores que pasan literales String o variables String finales definidos en la misma unidad de compilación. Si puede inspeccionar los parámetros spec, host o file, sólo marcará los constructores que infringen la regla.

La regla de Java también marcará las instancias del constructor URL que contengan un nombre de spec, host o file codificado como variable que no se pueda inspeccionar.

Ejemplo 1.


import java.net.URL;

URL url = new URL("http://www.domain.com?id=test&name=plus+sign");
}

En el ejemplo 1, la regla no marcará el constructor de URL porque el signo más se encuentra en los parámetros de la consulta.

Ejemplo 2:


import java.net.URL;

URL url = new URL("http://www.domain.com/plus+path?id=test&name=ok");
}

En el ejemplo 2, la regla marcará el constructor de URL ya que hay un signo más en la parte de vía de acceso del URL.

Para obtener información adicional, consulte la documentación Java de java.net.URL.