El lenguaje de navegación de grafos de objetos (OGNL) es un lenguaje de expresiones (EL) de código abierto para Java que, si bien utiliza expresiones más simples que todas las compatibles con Java, permite obtener y establecer propiedades (mediante los métodos setProperty y getProperty definidos en JavaBeans ) y ejecutar métodos de clases Java. También facilita la manipulación de matrices.
Está diseñado para ser utilizado en aplicaciones Java EE con taglibs como lenguaje de expresiones.
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 .
Tecnología OGNL
OGNL comenzó como una forma de mapear asociaciones entre componentes de interfaz y objetos de back-end mediante nombres de propiedades. A medida que estas asociaciones adquirieron más funcionalidades, Drew Davidson creó el lenguaje de codificación clave-valor (KVCL). Posteriormente, Luke Blanshard reimplementó KVCL utilizando ANTLR y comenzó a usar el nombre OGNL. La tecnología fue reimplementada nuevamente utilizando el compilador Java ( JavaCC ).
OGNL utiliza la reflexión y la introspección de Java para acceder al grafo de objetos de la aplicación en tiempo de ejecución. Esto permite que el programa modifique su comportamiento en función del estado del grafo de objetos, en lugar de depender de la configuración en tiempo de compilación. También permite realizar cambios en el grafo de objetos.
Proyectos que utilizan OGNL
- WebWork y su sucesor Struts 2
- Tapiz (4 y anteriores)
- Flujo web de primavera
- Apache Click
- MyBatis - Framework de mapeo SQL
- Thymeleaf : un motor de plantillas Java XML/XHTML/HTML5
- FreeMarker : un motor de plantillas Java
Problemas de seguridad de OGNL
Debido a su capacidad para crear o modificar código ejecutable, OGNL puede introducir fallos de seguridad críticos en cualquier framework que lo utilice. Varias versiones de Apache Struts 2 han sido vulnerables a fallos de seguridad de OGNL. [ 3 ] A partir de octubre de 2017, la versión recomendada de Struts 2 es la 2.5.13. [ 4 ] Se insta a los usuarios a actualizar a la última versión, ya que las revisiones anteriores tienen vulnerabilidades de seguridad documentadas; por ejemplo, las versiones de Struts 2 de la 2.3.5 a la 2.3.31 y de la 2.5 a la 2.5.10 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.
Véase también
Enlaces externos
- Rama de mantenimiento de OGNL 3.x
- Página principal de OGNL 4.x (Apache)
- Vulnerabilidad de inyección de expresiones OGNL en Apache Struts CVE-2013-2134 Archivada el 9 de mayo de 2021 en Wayback Machine
Referencias
- ↑ "ognl.org" , OGNL Technology, Inc. , archivado del original el 25 de octubre de 2008 , consultado el 5 de noviembre de 2013.
- ↑ "OpenSymphony, QEPD (2000 - 2011)" . Open Symphony . Archivado del original el 5 de septiembre de 2013. Consultado el 1 de junio de 2011 .
- ↑ "Apache Struts : Lista de vulnerabilidades de seguridad" . cvedetails.com . Consultado el 2 de octubre de 2017 .
- ↑ "Versiones de Apache Struts" . struts.apache.org . Consultado el 2 de octubre de 2017 .
- ↑ Goodin, Dan (9 de marzo de 2017). "Vulnerabilidad crítica bajo ataque "masivo" pone en peligro sitios de alto impacto [ Actualizado ] " . Ars Technica . Consultado el 2 de octubre de 2017 .
- ↑ " [ CONFSERVER-67940 ] Inyección de OGNL en Confluence Server Webwork - CVE-2021-26084 - Crear y realizar un seguimiento de las solicitudes de funciones para los productos de Atlassian" . jira.atlassian.com . Consultado el 18 de octubre de 2021 .
- ↑ " [ CONFSERVER-79000 ] Vulnerabilidad de ejecución remota de código no autenticada mediante inyección de plantilla OGNL (CVE-2022-26134)" . jira.atlassian.com . Consultado el 3 de junio de 2022 .
- Lenguajes de scripting
- Software libre programado en Java.
- Java (plataforma de software)
- Software que utiliza la licencia BSD.
- Apache Commons
- Temas básicos de lenguajes de programación