Pregunta

Estoy reinventando la rueda y crear mi propia JSON analizar los métodos en Java.

Voy por la (muy bueno!) documentación en json.org.La única parte que estoy seguro es que se dice "o carácter de control"

Ya que la documentación es tan clara, y JSON es tan simple y fácil de implementar, yo pensaba que iba a ir por delante y que requieren de la especificación en lugar de ser suelto.

Cómo iba yo a correctamente tira de caracteres de control en Java?Tal vez hay una gama unicode?

enter image description here


Editar:Un (comúnmente?) falta el pedazo del rompecabezas

Yo se han informado que hay otros caracteres de control fuera de el rango definido 1 2 que puede ser problemático en <script> las etiquetas.

En particular la mayoría de los personajes U+2028 y U+2029, Separador de Línea y Párrafo, que actúan como saltos de línea.La inyección de una nueva línea en el medio de un literal de cadena más probable es que causa un error de sintaxis (sin cadena literal). 3

Aunque creo que esto no supone un XSS amenaza, todavía es una buena idea para añadir reglas para el uso en <script> las etiquetas.

  • Acaba de ser simple y codificar todos los que no son"ASCII imprimible" personajes con \u la notación.Los personajes son poco comunes, para empezar.Si lo deseas, puedes agregar a la lista blanca, pero yo recomiendo un blanco-enfoque de lista.
  • En caso de que usted no es consciente, no te olvides acerca de </script (no distingue mayúsculas de minúsculas), que podría causar inyección de secuencias de comandos HTML a la página con los personajes </script><script src=http://tinyurl.com/abcdef>.Ninguno de los personajes son por defecto codificado en JSON.
¿Fue útil?

Solución

Se Carácter.isISOControl(...) hacer?Por cierto, UTF-16 es una codificación de Unicode puntos de codificación...Vas a ser operativo en el nivel de byte, o en el carácter/punto de código de nivel?Recomiendo salir de la asignación de la codificación UTF-16 el carácter de los flujos de Java core Api...

Otros consejos

Incluso si no es muy específico, supongo que se refieren a la "control", personaje de la categoría de a partir de la especificación Unicode.

En Java, se puede comprobar si un personaje c es un control Unicode caracteres con la siguiente expresión: Character.getType(c) == Character.CONTROL.

Creo la definición Unicode de un carácter de control es:

El 65 caracteres en los rangos U+0000..U+001F y U+007F..U+009F.

Esa es su definición de un código de control, pero el de arriba es seguido por la frase "También se conoce como caracteres de control.", así que...

Sé que la pregunta ha sido formulada hace un par de años, pero estoy respondiendo todos modos, porque el aceptado la respuesta no es correcta.

Character.isISOControl(int codePoint) 

realiza la siguiente comprobación:

(codePoint >= 0x00 && codePoint <= 0x1F) || (codePoint >= 0x7F && codePoint <= 0x9F);

El JSON especificación define en https://tools.ietf.org/html/rfc7159:

  1. Las cadenas de

    La representación de las cadenas es similar a las convenciones utilizadas en la C la familia de lenguajes de programación.Una cadena que comienza y termina con la las comillas.Todos los caracteres Unicode puede ser colocado dentro de la comillas, excepto para los caracteres que deben ser escapado:comilla inversa solidus, y los caracteres de control (U+0000 a través de U+001F).

Character.isISOControl(int codePoint) 

será la bandera de todos los caracteres que deben ser escapado (U+0000-U+001F), aunque también la bandera de los personajes que no necesitan ser escapado (U+007F-U+009F).No es necesario para escapar de los personajes (U+007F-U+009F).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top