¿Qué es una inyección JSON y cómo prevenirla?
JSON (notación de objetos JavaScript)es un formato de intercambio de datos estándar abierto que se utiliza para comunicarse entre aplicaciones. JSON es similar a XML pero más fácil de leer que XML debido a su naturaleza muy liviana (tamaño de archivo pequeño).
JSON se derivó de JavaScript, el lenguaje de programación de la Web y el más popular del mundo. Esto lo convierte en el formato de intercambio de datos preferible en Internet. Aunque se parece mucho a la sintaxis literal de objetos de JavaScript, se puede utilizar independientemente de JavaScript y muchos entornos de programación cuentan con la capacidad de leer (analizar) y generar JSON.
JSON existe como una cadena, lo que resulta útil cuando desea transmitir datos a través de una red. Sin embargo, es necesario convertirlo en un objeto JavaScript nativo cuando desee acceder a los datos. JavaScript proporciona un objeto JSON global con métodos disponibles para convertir un objeto nativo en una cadena (serialización) y convertir una cadena en un objeto nativo (deserialización). Una cadena JSON se puede almacenar en su propio archivo, que es básicamente un archivo de texto con una extensión .json y un tipo MIME de aplicación/json, que es básicamente una extensión del protocolo de correo electrónico de Internet que permite a sus usuarios intercambiar diferentes tipos de datos, como archivos de imágenes, audio y vídeo a través de Internet.
Muchas aplicaciones web lo utilizan para almacenar información importante y comunicarse entre sí. JSON a menudo se trata como datos almacenados en caché cuando se usa para almacenar datos y puede contener información confidencial. JSON se utiliza a menudo junto con API RESTful y aplicaciones AJAX para transmitir información confidencial, como credenciales de autenticación, cuando se utilizan para enviar mensajes.
El uso generalizado de JSON en aplicaciones web lo convierte en un objetivo de actividades maliciosas. JSON por sí solo no es una gran amenaza. Después de todo, es sólo un formato de intercambio de datos. Los verdaderos problemas de seguridad con JSON surgen en la forma en que se utiliza. Si se utilizan incorrectamente, las aplicaciones basadas en JSON pueden volverse vulnerables a ataques como el secuestro y la inyección de JSON. Este artículo analizará todo lo relacionado con los ataques de inyección JSON, incluido cómo detectarlos y prevenirlos.

¿Qué es el ataque de inyección JSON y cómo funciona?
Los ataques de inyección en aplicaciones web son ciberataques que buscan inyectar código malicioso en una aplicación para alterar su ejecución normal. Los ataques de inyección pueden provocar pérdida de datos, modificación de datos y denegación de servicio. Como resultado, figura como el riesgo de seguridad de aplicaciones web número uno en la lista. Top 10 de OWASP .
La inyección JSON es un ejemplo típico de ataque de inyección, aunque no es tan común ni peligroso como otra forma de ataque de inyección, como Inyección SQL . La semántica de los documentos JSON y los mensajes de salida se puede alterar significativamente si una aplicación construye JSON a partir de entradas que no son de confianza o no están validadas. Un atacante puede aprovechar la laguna para insertar códigos maliciosos que pueden cambiar la ejecución normal del programa. En algunos casos, la inyección JSON puede provocar Secuencias de comandos entre sitios o Evaluación de código dinámico .
JSON tradicionalmente se ha analizado utilizando una función eval(), pero esta es una práctica insegura. Cualquier código que utilice eval() para deserializar el JSON en un objeto JavaScript está abierto a ataques de inyección JSON.
La inyección JSON ocurre cuando:
- El servidor no desinfecta los datos de una fuente que no es de confianza y los escribe directamente en una secuencia JSON. Esto se conoce como inyección JSON del lado del servidor.
- Los datos de una fuente que no es de confianza no se desinfectan ni se analizan directamente mediante la función de evaluación de JavaScript. Esto se conoce como inyección JSON del lado del cliente.
Para demostrar cómo funciona un ataque de inyección JSON del lado del servidor, consideremos una aplicación web que acepta la entrada de nombre de usuario y contraseña de los usuarios sin desinfección. Los datos proporcionados por el usuario (nombre de usuario, contraseña y tipo de cuenta) se almacenan en el lado del servidor como una cadena JSON. La cadena JSON se forma mediante una concatenación simple como se muestra en el siguiente código:
|_+_|Dado que la aplicación no desinfecta los datos de entrada, un usuario malintencionado decidió agregar datos inesperados a su nombre de usuario: |_+_|
En consecuencia, la cadena JSON resultante se convierte en:
{ 'Cuenta':'usuario