Retorno de lanzamiento desde ClassUtil.newInstance

1

Comencé a ingresar a la seguridad de Java y tuve una pregunta que no pude encontrar una respuesta.

Supongamos que tenemos una aplicación web que utiliza el siguiente código y que UserControlledString puede configurarse para que sea de la clase que queramos:

SomeClass someClassObj = (SomeClass) ClassUtil.newInstance(UserControlledString);

¿Sería posible explotar esto y causar daño? Por lo que puedo decir, lo más probable es que no, pero pensé que lo preguntaría.

    
pregunta learn2live 23.02.2017 - 00:09
fuente

3 respuestas

0

No sé qué es ClassUtil , pero para Class.newInstance :

  • Algunas clases se auto-registran desde su constructor. Una idea terrible, pero hay que ir Por lo tanto, la instancia persistirá incluso si es no es una instancia de SomeClass .

  • Quizás realmente hay un subtipo de SomeClass que cuelga que es inapropiado.

  • El ClassLoader puede realizar una red o archivo relativamente caro acceso, y puede acumular memoria que no desaparecerá hasta que el proceso sea reiniciado.

  • Abre la superficie de ataque a través de ClassLoader s mal escrito. Piense en todos los personajes divertidos que podría poner en la cadena.

respondido por el Tom Hawtin - tackline 23.02.2017 - 12:33
fuente
0

Depende de lo que es una clase y lo que estás haciendo con ella. En sí mismo, no hay nada intrínsecamente inseguro al respecto.

    
respondido por el joe 23.02.2017 - 04:40
fuente
0

Es posible causar daño si SomeClass es una clase primaria y UserControlledString es la clase secundaria

Tome la clase padre Discount como ejemplo. Hay clases secundarias MixAndMatchDiscount y QuantityDiscount .

Discount discountObj = (Discount) ClassUtil.newInstance(UserControlledDiscountString);

Los usuarios pueden modificar el descuento esperado a otro descuento para obtener un mejor precio en caso de que conozcan el nombre de su clase.

    
respondido por el Roger Ng 23.02.2017 - 05:04
fuente

Lea otras preguntas en las etiquetas