2009-03-17 17 views
7

Como recién llegado relativo tanto a web como a MVC, estoy buscando un buen resumen de las mejores prácticas de seguridad que debo implementar.Protección de un sitio ASP.Net MVC

El sitio será público con "datos moderadamente confidenciales" (lo que significa que no se nos puede demandar, pero probablemente no se hagan muchos amigos si se obtuvieron los datos) y se tomarán los siguientes pasos de seguridad: a: autenticación/autenticación de formularios/miembros b: consultas parametrizadas para evitar la inyección de SQL. c: Tiempo de espera automático con x min de inactividad c: SSL para cifrado de cliente a servidor

¿Qué más recomienda usted?

* Asegurar IIS y la red no caen bajo mi dominio, por lo que estoy más interesado en las cosas que tengo que hacer para el software.

+0

Excelente pregunta, especialmente si vienes de ASP.NET simple. – Soviut

+0

Gracias. Lo creas o no, la mayor parte de mi actividad en la web se produjo hace 10 años con asp clásico. ¡Tengo mucho que ponerme al día! – Aaron

Respuesta

4
  • Si utiliza cookies para reconocer a los usuarios, asegúrese de usar un token arbitraria (como un GUID) para almacenar en el cliente para su identificación. He visto demasiados sitios web que almacenan mi dirección de correo electrónico o mi nombre de usuario en mi cookie ... ¡solo tengo que cambiarlo por otro!

  • Escriba su software para que pueda ejecutarse bajo medium trust.

+0

primer comentario es tan obvio y fácil, ¡es brillante! Nunca lo hubiera pensado en 100 años :) Definitivamente se aplica médicamente y lo haré. ¡Gracias! – Aaron

+0

No dude en enviar la respuesta si la encuentra útil. Tal vez incluso aceptarlo si termina siendo el mejor. –

3

Si eres nuevo en el desarrollo web, debes tener en cuenta cross site scripting (XSS). Puede utilizar el método Http.Encode helper para protegerse de esto en ASP.NET MVC.

1
  1. Tal vez usted debe elegir los métodos que se pueden invocar desde fuera o no. Por ejemplo, tenga cuidado de hacer un método como eliminar cualquier tabla como http://yourhost.com/edit/deletealltable. Asegúrate de diseñar bien tu clase y tus métodos. Y otorgue atributos [NonAction] para evitar que se invoque el método público.

  2. Asegúrate de mostrar los datos (especialmente confidenciales) que necesites con un diseño sofisticado mínimo y usa el script del cliente el tiempo que sea necesario.

  3. Elimine cualquier archivo de basura no utilizado, como archivos no utilizados en la carpeta de la solución.

  4. Compruebe y vuelva a verificar y valide cualquier control de entrada como cuadro de texto. Solo puedo dar algo en el cuadro de texto para hackear tu sistema.
  5. Si usa la mezcla entre MVC y ASP.NET normal, elimine cualquier dependencia entre ellos.
+0

¿Podría explicar la eliminación de la dependencia entre el mvc y el formulario web normal? No estoy seguro de lo que quieres decir exactamente. ¡Gracias! – Aaron

+0

por ejemplo, un aspx regular mostrará un control elegante y luego obtendrá datos de mvc http: // yourhost/customer/getall y mostrará el resultado usando javascript. Está bien, pero tiene más código de mantenimiento en ambos – nickotech2000

0

Asegúrese de cubrir los conceptos básicos minuciosamente, independientemente de ASP.NET. Asegúrese de que su DBMS tenga un usuario separado con los privilegios mínimos necesarios (por ejemplo, CRUD y la ejecución de sprocs desde bases de datos específicas) configurados para acceder a la base de datos desde la aplicación web.La parametrización de consultas es una excelente idea, pero SIEMPRE EXPRIME SU ENTRADA DE CUALQUIER FORMA: no es una defensa completa contra la inyección de sql.

Mantenga su diseño limpio y fácil de entender. Documente lo que haga claramente, especialmente en el lado de la base de datos. Sería muy malo si todo su buen trabajo fuera destruido por dos programadores meses o años después - uno que no se dio cuenta, digamos, que el usuario de la base de datos para la aplicación web (ahora accediendo a una base de datos en otro servidor) no debería tener privilegios de raíz, y otro que agregó un control que no limpió la entrada correctamente. Hay mucho que se puede hacer sobre este tipo de cosas, pero diseñar la posibilidad de que los tontos mantendrán tu código no es para que los codificadores piensen que eres dulce, es para que los tontos no te saquen de negocios.

2

Asegúrese de evitar solicitudes fuera de servicio. Asegúrese de que el cliente esté autenticado antes de permitir ver datos confidenciales o, en algunos casos, asegúrese de que el cliente haya ingresado al canal correcto antes de permitir la manipulación de datos. Por ejemplo, solo permita agregar un artículo a su carrito si la solicitud proviene de la página de detalles del producto. Si no lo haces, cualquiera puede perder el tiempo con la acción. La URL sería como http://server/cart/add/XYZ123 y cualquiera podría modificar el parámetro 'id'.

+0

Estoy un poco avergonzado de saber que es fácil ... pero ¿cómo obtengo el nombre de la página solicitante (para asegurarme de que proviene del canal correcto)? ¿Es eso parte del objeto de solicitud? ¡Gracias! – Aaron

+0

Puede usar una cookie/variable de sesión para identificar la entidad con la que está trabajando. Entonces solo permite la acción en esa entidad. Tu "previo" establecería eso, lo que significa que ya has estado allí. –

Cuestiones relacionadas