Práctica 5. Seguridad en ASP .NET

Document Sample
Práctica 5. Seguridad en ASP .NET Powered By Docstoc
					     Práctica 5
Seguridad en ASP .NET
   Comercio Electrónico

     Universidad de Oviedo
Introducción
   Normalmente, una aplicación de comercio
    electrónico tendrá determinados recursos a los que
    sólo es posible acceder siendo usuario registrado
         Es lo que entendemos por autenticación y autorización




Comercio Electrónico (EUITIO). Curso 2007-2008                   2
Tipos de autenticación
 Usando la seguridad de Windows
 Basada en formularios
 Mediante Microsoft Passport




Comercio Electrónico (EUITIO). Curso 2007-2008   3
Seguridad de Windows
 La autenticación de Windows permite usar la propia
  seguridad de Windows para permitir o denegar el
  acceso a ciertas áreas del sitio Web
 Los clientes deberán tener cuentas de usuario en el
  servidor
 A su vez, hay otros tres tipos de autenticación:
         Básica
         “Digest”
         Integrada


Comercio Electrónico (EUITIO). Curso 2007-2008          4
Basada en formularios
   No se hace uso de las cuentas de usuario de
    Windows
         IIS, por omisión, ejecuta todas las aplicaciones ASP .NET con
         la cuenta de usuario IUSR_NombreDelOrdenador
   Requiere algo más de programación
         Pero es lo más usual en una aplicación Web
           – (Donde, por supuesto, los usuarios no tendrán cuenta en el servidor)
           – La de Windows podría ser apropiada para una intranet




Comercio Electrónico (EUITIO). Curso 2007-2008                                      5
Microsoft Passport
   La autenticación recaería en un sitio externo: el de
    Microsoft Passport




Comercio Electrónico (EUITIO). Curso 2007-2008             6
Fichero Web.config
   La seguridad en ASP .NET se configura en el fichero
    Web.config
   Las secciones involucradas son:
         <authentication>
         <identity>
         <authorization>




Comercio Electrónico (EUITIO). Curso 2007-2008            7
Sección <authentication>
    <authentication
       mode=“Windows|Forms|Passport|None”>

 Ahí seleccionamos uno de los tres tipos de
  autenticación, o None (que es el valor
  predeterminado y sólo espera usuarios anónimos)
 Esto sólo se escribirá una vez, en el fichero
  Web.config del directorio raíz de la aplicación




Comercio Electrónico (EUITIO). Curso 2007-2008      8
Sección <authorization>
<authorization>
  <allow users=“lista de usuarios separados por comas“/>
  <deny users=“lista de usuarios separados por comas“/>
</authorization>

   Dentro de ella indicamos a qué usuarios permitimos
    o denegamos el acceso
         Mediante un asterisco designamos a todos los usuarios
           <allow users=“*“/>

         Con interrogación, a los usuarios anónimos (no autenticados)
           <deny users=“?“/>



Comercio Electrónico (EUITIO). Curso 2007-2008                          9
Seguridad de subdirectorios
 Lo normal es que la mayor parte del sitio Web
  permita el acceso anónimo, restringiendo el acceso
  sólo en determinados directorios
 Para ello, podemos crear un fichero Web.config en
  cada directorio particular, indicando las
  restricciones mediante la sección
    <authorization>




Comercio Electrónico (EUITIO). Curso 2007-2008     10
Basada en formularios
¿Cómo funciona?
   Cuando se solicita una página .aspx protegida mediante la
    directiva <deny>, si el usuario no está autenticado se le
    redirige automáticamente a la página Login.aspx del
    directorio raíz
   Debemos crear dicha página
         Típicamente tendrá al menos dos campos:
           – El nombre de usuario y la contraseña
         Junto con un botón para enviar dichos campos
           – En el evento Click de dicho botón programaremos el control de acceso
             deseado
                 Consultando un fichero XML con los usuarios, una tabla de una base de datos o de
                  cualquier otro modo



Comercio Electrónico (EUITIO). Curso 2007-2008                                                 12
Ejercicio
 Crear una aplicación ASP .NET que tenga un
  directorio privado (sólo para usuarios registrados)
 ¿Cómo?
         Modificar el fichero Web.config del directorio raíz para
         seleccionar autenticación basada en formularios
         Crear un subdirectorio y, dentro de él, un nuevo fichero
         Web.config sólo con la sección de autorización
           – Denegando el acceso a usuarios anónimos
         Crear una página sencilla en el directorio principal y otra en
         dicho directorio protegido, y observar qué es lo que ocurre

Comercio Electrónico (EUITIO). Curso 2007-2008                            13
Resultado




Comercio Electrónico (EUITIO). Curso 2007-2008   14
¿Qué ha pasado?
 Que al intentar acceder a la página situada en el
  directorio privado, detecta que el usuario no está
  autenticado y nos redirige automáticamente a la
  página de registro (login.aspx si no decimos otra
  cosa)
 Como aún no la hemos creado, da el típico error 404
  de HTTP al no encontrar el recurso




Comercio Electrónico (EUITIO). Curso 2007-2008      15
Página de registro
 Lo típico es, en el evento Click del botón,
  comprobar si es o no un usuario válido
 Si no lo es, mostraremos un mensaje de error
         Por ejemplo, un control Label con la propiedad Visible a
         false y que pondremos a true para mostrar el mensaje
   ¿Y si lo es? Es decir, ¿si se autentica
    correctamente?
         Deberíamos redirigirle a la página de la que proviene
         Para ello hacemos uso del método estático
           FormsAuthentication.RedirectFromLoginPage

Comercio Electrónico (EUITIO). Curso 2007-2008                      16
FormsAuthentication.RedirectFromLoginPage

 La clase FormsAuthentication pertenece al
  espacio de nombres System.Web.Security (que
  habrá que declarar en una cláusula using)
 Recibe dos parámetros:
         El nombre del usuario
         Y un valor lógico indicando si la „cookie‟ debe ser persistente o
         no (de sesión)




Comercio Electrónico (EUITIO). Curso 2007-2008                          17
 ¿Qué hace ese método?
    Envía una „cookie‟ al cliente
          Ésta se usará en cada petición de página subsiguiente para
          comprobar si el usuario está autenticado
            – Así, no pedirá continuamente al usuario que se vuelva a registrar
  Y redirige a la página protegida
  Si quisiéramos algo más personalizado, podríamos
   hacer lo mismo “a mano”:
string redurl =
    FormsAuthentication.GetRedirectUrl(NombreUsuario.Text, false);
FormsAuthentication.SetAuthCookie(NombreUsuario.Text, false);
Response.Redirect(redurl);

 Comercio Electrónico (EUITIO). Curso 2007-2008                                   18
¿Y si se llama a la página de registro
directamente?
   No está pensada para eso
         Sólo para ser redirigida a ella cuando se solicita un recurso
         protegido por parte de un usuario anónimo
   En ese caso, al no tener ninguna página a la que
    retornar, intentará llamar a la página Default.aspx
         Si ésta no existe, se producirá un error 404 (página no
         encontrada)




Comercio Electrónico (EUITIO). Curso 2007-2008                           19
Elemento <forms>
<authentication>
  <forms name=“MiAplicacion” loginUrl=“Registro.aspx” />
  ...
</authentication>

 Va dentro del elemento <authentication> en el
  fichero Web.config
 Permite indicar, entre otras cosas, una página de
  registro distinta
         Así como el nombre que se le dará a la „cookie‟



Comercio Electrónico (EUITIO). Curso 2007-2008             20
Ejercicio
   Ampliar el ejercicio anterior creando una página de
    registro que pida un nombre de usuario y contraseña
    y busque esos valores en una tabla de una BD




Comercio Electrónico (EUITIO). Curso 2007-2008       21
Objeto User
   Una vez autenticado, hay disponible información
    sobre el usuario en el objeto User
         User.Identity.Name
         User.Identity.IsAuthenticated
         etcétera
   Podemos usarlo para comprobar si el usuario está
    autenticado incluso en aquellas páginas que no
    están protegidas



Comercio Electrónico (EUITIO). Curso 2007-2008         22
Ejercicio
   Que la página principal de la aplicación (la
    Default.aspx del directorio raíz), en el caso de
    que haya un usuario autenticado, muestre el
    siguiente mensaje:
           Bienvenido, <nombre del usuario>




Comercio Electrónico (EUITIO). Curso 2007-2008         23
¿Y para salir de la sesión?
   Si el usuario desea “salir de la sesión” (es decir,
    dejar de ser usuario autenticado para volver a ser
    anónimo), podemos hacerlo con el siguiente método:
           FormsAuthentication.SignOut();




Comercio Electrónico (EUITIO). Curso 2007-2008       24
Dar de alta usuarios
 No sería más que insertar un registro en una tabla
 La sintaxis en ADO .NET y C# es:
           INSERT INTO tabla (campo1, campo2...)
                  VALUES („Valor1‟, „Valor2‟...)

   Y hay que llamar al método ExecuteNonQuery del
    objeto OleDbCommand (ya que, a diferencia de
    SELECT, no devuelve nada)




Comercio Electrónico (EUITIO). Curso 2007-2008         25
Ejercicio
   Crear una página para dar de alta dinámicamente
    nuevos usuarios




Comercio Electrónico (EUITIO). Curso 2007-2008        26