Parámetros de cadena de consulta seguros

6

Tengo una aplicación que utiliza el componente Thick box jQuery para abrir una página emergente.

Y paso mis parámetros en una cadena de consulta como esta:

 <a id="btnShowPopup6" runat="server" class="thickbox" href='<%#"RollUp.aspx?TCode="+Eval("Code")+"...."+"&AR=1"+"&TBiframe=true&height=530&width=750"%>'>

Esta es la única opción que tengo, no puedo usar las variables de sesión con este método o publicar parámetros, solo la forma de la cadena de consulta.

¿Cómo puedo asegurar mi cadena de consulta para que el usuario no pueda jugar con ella? ¿Cuál es la mejor manera de cifrar mi cadena de consulta?

    
pregunta Anyname Donotcare 19.12.2012 - 15:09
fuente

1 respuesta

5

Poner los valores proporcionados por el usuario en una llamada eval() es una idea horrible, porque esencialmente equivale a una vulnerabilidad de ejecución remota de código. Digamos que su código se ve así ...

var data = eval(webRequest.Parameters["p"]);

Ahora imagina que puse esto en el parámetro p ...

System.IO.File.Delete(@"c:\windows\system32\ntoskrnl.exe");

¡Vaya! Acabo de eliminar tu kernel.

Ninguna cantidad de problemas con el escape funcionará aquí; es un concepto fundamentalmente roto.

Los parámetros de cifrado no hacen más que complicar las cosas. Elija el enfoque correcto y use una variable de sesión como la que está diseñado para hacer el idioma.

Actualización: Para ser claros, estoy hablando de eval () en un sentido genérico. Si está utilizando el método de enlace de Eval en un controlador de datos en C #, debería estar bien siempre que no haya parámetros de usuario, de lo contrario, pueden hacer que su código descargue valores arbitrarios de su Base de datos, sin necesidad de inyección SQL.

    
respondido por el Polynomial 19.12.2012 - 15:45
fuente

Lea otras preguntas en las etiquetas