Object-Graph Navigation Language (OGNL) es un lenguaje de expresión (EL) de código abierto para Java que, si bien utiliza expresiones más simples que la gama completa de las admitidas por el lenguaje Java, permite obtener y configurar propiedades (a través de los métodos setProperty y getProperty definidos, que se encuentran en JavaBeans ), y la ejecución de métodos de clases Java. También permite una manipulación de matrices más sencilla.
Está destinado a ser utilizado en aplicaciones Java EE con taglibs como lenguaje de expresión.
OGNL fue creado por Luke Blanshard y Drew Davidson de OGNL Technology. [1] El desarrollo de OGNL fue continuado por OpenSymphony, que cerró en 2011. [2] OGNL se desarrolla ahora como parte de Apache Commons .
OGNL comenzó como una forma de mapear asociaciones entre componentes front-end y objetos back-end usando nombres de propiedades. A medida que estas asociaciones adquirieron más funciones, Drew Davidson creó el lenguaje de codificación de valor-clave (KVCL). Luego, Luke Blanshard reimplementó KVCL usando ANTLR y comenzó a usar el nombre OGNL. La tecnología se volvió a implementar usando el compilador Java Compiler ( JavaCC ).
OGNL utiliza la reflexión y la introspección de Java para abordar el gráfico de objetos de la aplicación en tiempo de ejecución. Esto permite que el programa cambie su comportamiento en función del estado del gráfico de objetos en lugar de depender de la configuración en tiempo de compilación. También permite realizar cambios en el gráfico de objetos.
Debido a su capacidad para crear o cambiar código ejecutable, OGNL es capaz de introducir fallas de seguridad críticas en cualquier marco que lo use. [ cita requerida ] Varias versiones de Apache Struts 2 han sido vulnerables a fallas de seguridad de OGNL. [3] A octubre de 2017, la versión recomendada de Struts 2 es 2.5.13. [4] Se insta a los usuarios a actualizar a la última versión, ya que las revisiones anteriores han documentado vulnerabilidades de seguridad; por ejemplo, las versiones 2.3.5 a 2.3.31 y 2.5 a 2.5.10 de Struts 2 permiten a atacantes remotos ejecutar código arbitrario . [5] Atlassian Confluence se ha visto afectado repetidamente [6] [7] por problemas de seguridad de OGNL que permitían la ejecución remota de código arbitrario y requerían que todos los usuarios actualizaran.