2010-10-20 21 views
31

Snoop le permite mirar dentro de la aplicación y cambiar las propiedades del elemento. Es una gran ventaja para los desarrolladores, pero puede ser un problema de seguridad en algunos casos, como cuando tenemos usuarios a los que les gusta mirar en lugares donde no deberían estar mirando. ¿Hay alguna forma de evitar que aplicaciones como Snoop "fisgoneen" tu aplicación?¿Cómo hacer una prueba a prueba de su aplicación wpf?

Y si no hay forma de bloquearlo, ¿qué recomienda hacer para minimizar los riesgos de seguridad?

Snoop es una utilidad que le permite explorar el árbol visual de una aplicación wpf y ver y cambiar propiedades. Es muy útil cuando intenta depurar algo y no tiene idea de lo que está pasando. Puede encontrar más here.

Gracias.

+0

Buena pregunta, sido preguntándome a mí mismo –

+1

¿Puede dar más información sobre este programa "Snoop" o publicar un enlace a información sobre él? –

Respuesta

30

Implementando la seguridad correctamente. Si su "seguridad" puede frustrarse con una herramienta como Snoop, entonces lo está haciendo mal.

Supongamos que hay un comando que solo ciertos usuarios pueden ejecutar. Parece que el único lugar donde aplica esto es en el nivel de UI (al deshabilitar el botón correspondiente, por ejemplo). Siendo ese el caso, tienes razón, podría usar Snoop fácilmente para habilitar el botón y ejecutar el comando. Pero debe hacer cumplir las restricciones de seguridad en su servidor, o tal vez en su lógica de ejecución de comandos si no tiene servidor. Básicamente, la seguridad debe implementarse tan cerca de lo que intenta proteger como sea posible. La seguridad en el nivel de UI es meramente para la conveniencia del usuario.

+0

Kent, gracias por su respuesta. Estoy de acuerdo con usted, la seguridad no debe implementarse en el nivel de UI. En mi proyecto utilizamos comandos y tenemos lógica en CanExecute que deshabilitará los botones para ciertos usuarios (y no pueden volver a habilitarse usando snoop), así como las protecciones del servidor que evitan que los usuarios puedan hacer ciertas cosas. Sin embargo, tenemos otras aplicaciones que no usan comandos y los botones simplemente se ocultan, por lo que se pueden "husmear" fácilmente. – chiefanov

39

Realmente hay una forma de detectar si su aplicación está siendo "fisurada" por el programa snoop. La solución que daré no es una bala de cristal, y si alguien realmente quiere fisgonear su aplicación, tendrían que modificar el código fuente de snoop (es un proyecto de código abierto).

Lo que realmente snoop hace es inyectar un ensamblado en su aplicación, y el ensamblado inyectado examina recursivamente el árbol visual de las aplicaciones comenzando desde la raíz. En otras palabras, snoop realmente ejecuta dentro de su aplicación. Una vez dicho esto, la solución es plantear un evento cuando el conjunto de snoop se inyecta en su aplicación.

En primer lugar, es necesario suscribirse al evento de montaje cargado en algún lugar de su aplicación (preferiblemente el begginging):

AppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(CurrentDomain_AssemblyLoad); 

Entonces, usted implementar el controlador de algo como esto:

 void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args) 
    { 
     if (args.LoadedAssembly.FullName.StartsWith("ManagedInjector")) 
      MessageBox.Show("hey you, stop snooping");//and shut down your application. 
    } 

Probablemente necesites mejorar esta solución para una solución de bala de plata real, pero al menos esta solución definitivamente evitará que la última versión actual de snoop se ejecute como está (sin el código modificado). La mejor solución sería verificar que no se estén inyectando ensambles externos en su aplicación.

Sin embargo, Kent todavía tiene razón en el hecho de que una utilidad como Snoop no debería causar ninguna vulnerabilidad de seguridad ya que la seguridad no debería implementarse en el nivel de UI. Pero al menos esto le muestra cómo evitar que las personas "husmeen" su aplicación.

+3

Esto es genial. Y en combinación con la respuesta de Kent, exactamente lo que estaba buscando. – chiefanov

+2

Ambas son excelentes respuestas, muchas gracias muchachos –

+0

sí, esta respuesta completa la solución. – ahmedsafan86

0

una gran respuesta para una pregunta muy buena,

Quiero añadir un ejemplo de la contraseña que nunca debe ser guardado en la DataContext, como comprobar Snoop también el DataContext de la interfaz de usuario, por lo que si se utiliza la derecha controle PasswordBox encontrará que no puede enlazar la propiedad de la contraseña, eso significa que incluso si fisgonea la aplicación no puede obtener la contraseña ya que no está guardada en ninguna propiedad

Pero encontramos muchas personas que intentan crea una solución alternativa (helpers, behaviors, usercontrol ...) para vincular la contraseña, pero se olvidan de que snoop puede obtenerlo así

Así que su servidor nunca debe confiar en su cliente, cada vez que debe verificar el privilegio correcto (ya que podemos oler la solicitud del cliente usando Fiddler para exp y reconstruir una solicitud de cliente para pasar la seguridad de la aplicación cliente)

Cuestiones relacionadas