SlideShare una empresa de Scribd logo
SEGURIDADES EN
APLICACIONES ASP.NET
     Elaborado por:
     David Del Castillo

     DM Quito, agosto del 2011
Creación de un sitio Web con autenticación
 mediante formulario
La comprobación de seguridad se puede hacer de 3 formas:
1- Usando código directo, es decir, en el código de la aplicación
tendremos los nombres y las claves.
2- Los nombres de los usuarios y las claves estarán en el fichero
Web.config.
Se guardara un valor HASH que servirá para comprobar si la clave es
"buena".
3- Los nombres y claves se guardan en una base de datos.
Incrementa el nivel de seguridad, las claves se guardan como valores
HASH.
SHA1 es utilizado por defecto en .NET
1.- Usando código directamente:
 La comprobación se hará al pulsar en el botón LOGIN, por tanto
 el código estará dentro del evento Click.
 Se debe importar la librería System.Web.Security
 •Lo que se hace es comprobar si el nombre y la clave coinciden
 con lo escrito en el código.
 • Además podemos obligar al usuario a “loguearse” cambiando
 en el Web,config la forma de autenticación asi:
 <authentication mode="Windows" />
 - Cambiar por:
 <authentication mode="Forms">
    <forms loginUrl="Login.aspx" />
 </authentication>
Y también en la parte de “autorización” de esta manera:
<authorization>
   <allow users="*" />
Cambiar por:
<authorization>
   <deny users="?" /> <!-- solo los usuarios autenticados -->
</authorization>
2.- Indicando los usuarios en Web.config:

- En el fichero Web.config podemos guardar los nombres de usuarios
y las claves, de forma que el ASP.NET se encargue de comprobar si
debe o no autorizarlo para entrar en nuestro sitio.
-Las claves las vamos a guardar como un valor HASH, es decir, un
valor numérico que será único para cada una de las claves.
- Este código deberá ir en la sección authentication. Asi:
<authentication mode="Forms">
  <forms loginUrl="Login.aspx">
    <credentials passwordFormat="SHA1">
     <user name="pepe"
       password="7550D35A69BE9ACA9AF9C29B880DC3ADEA01BEDC" />
3.- Los nombres y claves se guardan en una base de datos.

- Solo deja iniciar una aplicación después de comprobar que el
usuario y la clave introducidas son correctos. Pero para saber si la
clave introducida es correcta, se busca en una base de datos.
-Aquí el código de la función que valida el usuario y clave:
private bool comprobarUsuario(string nombre, string clave)
{
      // Conectar a la base de datos
      SqlConnection cnn = null;
      //
      try
      {
           // Conectar a la base de datos de SQL Server
        cnn = new SqlConnection(cadenaCnn);
         cnn.Open();
// Definir la cadena que vamos a usar para comprobar si el usuario y el
password son correctos.
// Utilizo parámetros para evitar inyección de código.
           System.Text.StringBuilder sel = new System.Text.StringBuilder();
           // Usando COUNT(*) nos devuelve el total que coincide
           // con lo indicado en el WHERE,
           // por tanto, si la clave y el usuario son correctos,
           // devolverá 1, sino, devolverá 0
sel.Append("SELECT COUNT(*) FROM Usuarios ");
        sel.Append("WHERE Nombre = @Nombre AND Clave = @Clave");
        // Definir el comando que vamos a ejecutar
        SqlCommand cmd = new SqlCommand(sel.ToString(), cnn);
        // Creamos los parámetros
        cmd.Parameters.Add("@Nombre", SqlDbType.NVarChar, 50);
        cmd.Parameters.Add("@Clave", SqlDbType.NVarChar, 40);
        //
        // Asignamos los valores recibidos como parámetro
        cmd.Parameters["@Nombre"].Value = nombre;
        cmd.Parameters["@Clave"].Value = clave;
        //
        // Ejecutamos la consulta
        // ExecuteScalar devuelve la primera columna de la primera fila
        // por tanto, devolverá el número de coincidencias halladas,
        // que si es 1, quiere decir que el usuario y el password son
correctos.
        int t = Convert.ToInt32(cmd.ExecuteScalar());
        // Cerramos la conexión
        cnn.Close();
        //
        // Si el valor devuelto es cero
        // es que no es correcto.
        if( t == 0 )
        {
            return false;
        }
Tanto el nombre del usuario como la clave, los pasamos como
parámetros de la función. Y se buscarán en la base de datos tal y
como los pasemos a esa función.
 Este código "supone" que accedemos a una base de datos que está
indicada en la cadena de conexióncadenaCnn, y que en esa base
de datos hay una tabla llamada Usuarios que al menos tiene dos
campos, uno llamado Nombre que es del tipo nvarchar y que tiene
una longitud de 50 caracteres y el otro llamado Claveque también es
del tipo nvarchar y con una longitud de 40 caracteres.

Guardar los datos de la clave de forma encriptada
Una solución para que el valor de la clave no esté en texto normal, es
encriptándola en formato SHA1 al estilo que lo hace ASP.NET.
Y este es el código de la función generarClaveSHA1:
private string generarClaveSHA1(string nombre) {
// Crear una clave SHA1 como la generada por //
FormsAuthentication.HashPasswordForStoringInConfigFile // Adaptada del ejemplo de
la ayuda en la descripción de SHA1 (Clase)
UTF8Encoding enc = new UTF8Encoding();
byte[] data = enc.GetBytes(nombre);
byte[] result;
SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider();
// This is one implementation of the abstract class SHA1.
result = sha.ComputeHash(data);
// // Convertir los valores en hexadecimal // cuando tiene una cifra hay que
rellenarlo con cero // para que siempre ocupen dos dígitos.
StringBuilder sb = new StringBuilder();
for(int i= 0; i< result.Length; i++) {
if( result[i] < 16 ) {
sb.Append("0"); }
sb.Append(result[i].ToString("x")); }
//
return sb.ToString().ToUpper(); }

Para que ese código funcione hay que tener una importación al espacio de nombres,
System.Security.Cryptography que es donde se define la
clase SHA1CryptoServiceProvider y también a System.Text que es donde se definen las
clases StringBuilder y UTF8Encoding.
Crear una aplicación Web que
 utilice un Web Form para realizar
 la autenticación de los usuarios
 que quieran navegar por el sitio
 Web que la utilice.
- Creación del proyecto y de la página de Login
- Crea un nuevo proyecto en Visual Studio,
selecciona el lenguaje y elije el de Aplicación Web.
- Pedira un nombre para crearlo en el localhost, en
el ejm sera = pruebaLogin.
-Cuando Visual Studio termine de crear el sitio, se
mostrará el proyecto "inicial“
                         -




                                                 12
- Añadimos dos etiquetas, dos cajas de textos
y un botón, asi:




                                            13
-Para añadir una nueva página, en el
menú Proyecto,
-selecciona Agregar Web Forms... esto
mostrará un diálogo como el mostrado en la
figura (el primer caso: Default)




                                             14

Más contenido relacionado

PPT
Conexión a sql server con c#
PPTX
GEOMETRIC COMPUTER PROGRAMA DE BD
DOCX
Script active directory
PDF
Trabajando con Procedimientos Almacenados y VB.Net
PDF
Acceso a BBDD mediante un servlet
PPT
Php y MySQL
PPTX
Análisis y diseño ii sql php
Conexión a sql server con c#
GEOMETRIC COMPUTER PROGRAMA DE BD
Script active directory
Trabajando con Procedimientos Almacenados y VB.Net
Acceso a BBDD mediante un servlet
Php y MySQL
Análisis y diseño ii sql php

La actualidad más candente (19)

PPT
Conexion Entre Php Y Mysqul
PPTX
Parámetros en shell script
PPT
PHP Y MYSQL
PPTX
Connection
PPTX
PDF
Examen febrero 2017-2018_daw_daw_solucion_ (1)
PDF
Taller programación web ajax con jquery
PPTX
Evidencia: Sesión Virtual Funciones PHP
PDF
Mail inicio sesion_remota
DOCX
Usando Netbeans para desarrollos en PHP
PPTX
Primeros Programas Shell Script
PDF
Redirección 301. White Paper Hostalia
PPTX
Diapositivas de objeto conecction
PDF
Forms 10g procedimientos y cursores
DOCX
Comandos basicos para la programación en javascript
PPTX
Jose manuel avila gonzález
PPTX
Jose manuel avila gonzález
PPTX
LABORATORIO DE PROGRAMACIÓN I.
ODT
Conexion Entre Php Y Mysqul
Parámetros en shell script
PHP Y MYSQL
Connection
Examen febrero 2017-2018_daw_daw_solucion_ (1)
Taller programación web ajax con jquery
Evidencia: Sesión Virtual Funciones PHP
Mail inicio sesion_remota
Usando Netbeans para desarrollos en PHP
Primeros Programas Shell Script
Redirección 301. White Paper Hostalia
Diapositivas de objeto conecction
Forms 10g procedimientos y cursores
Comandos basicos para la programación en javascript
Jose manuel avila gonzález
Jose manuel avila gonzález
LABORATORIO DE PROGRAMACIÓN I.
Publicidad

Destacado (8)

PPTX
Clave de acceso
PDF
Gpg by d7n0
PPT
Ventanas recuperación de la contraseña
PPT
Mac recuperación de disco duro
PPT
Desarrollando Controles AJAX con Microsoft Silverlight
PPTX
Presentacion321
PPT
Administrar cuentas de usuario y equipo
PDF
Como empezar leopard
Clave de acceso
Gpg by d7n0
Ventanas recuperación de la contraseña
Mac recuperación de disco duro
Desarrollando Controles AJAX con Microsoft Silverlight
Presentacion321
Administrar cuentas de usuario y equipo
Como empezar leopard
Publicidad

Similar a Seguridades asp.Net (20)

PDF
PPTX
Unidad 4
PPTX
APIREST LARAVEL Y PHP.pptx
PDF
Inyección_sql
PPT
Seguridad En Programación
PDF
Linq to sql 7
PDF
Introducción a recaptcha 3.0
PPT
Oracle Y C#
PDF
Tutorial bd y php
PDF
Servicios web en php, perl, java
PPTX
Tópicos Avanzados de Programación - Unidad 4 Acceso a datos
PDF
Practica9 bases de datos
PDF
Practica9 bases de datos
DOCX
la mejor forma de Conectar c# con mysql con archivos de configuracion
DOCX
Instalacion de Postrgre sql en ubuntu
DOCX
Ejercicio de automatizacion IntelliJ+reporte.docx
PDF
Colegio+de+estudios+cientificos+y+tecnologicos+del+estado+de+mexico
DOCX
PDF
Conexión de visual basic a bases de datos. María Parra
Unidad 4
APIREST LARAVEL Y PHP.pptx
Inyección_sql
Seguridad En Programación
Linq to sql 7
Introducción a recaptcha 3.0
Oracle Y C#
Tutorial bd y php
Servicios web en php, perl, java
Tópicos Avanzados de Programación - Unidad 4 Acceso a datos
Practica9 bases de datos
Practica9 bases de datos
la mejor forma de Conectar c# con mysql con archivos de configuracion
Instalacion de Postrgre sql en ubuntu
Ejercicio de automatizacion IntelliJ+reporte.docx
Colegio+de+estudios+cientificos+y+tecnologicos+del+estado+de+mexico
Conexión de visual basic a bases de datos. María Parra

Último (20)

PPT
Que son las redes de computadores y sus partes
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PDF
Maste clas de estructura metálica y arquitectura
PDF
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
PDF
Estrategia de apoyo tecnología miguel angel solis
PPTX
Propuesta BKP servidores con Acronis1.pptx
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PPTX
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
PDF
Influencia-del-uso-de-redes-sociales.pdf
PPTX
Presentación de Redes de Datos modelo osi
PDF
Diapositiva proyecto de vida, materia catedra
PDF
taller de informática - LEY DE OHM
PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
PDF
Estrategia de apoyo tecnología grado 9-3
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
PDF
Plantilla para Diseño de Narrativas Transmedia.pdf
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PDF
SAP Transportation Management para LSP, TM140 Col18
Que son las redes de computadores y sus partes
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
Maste clas de estructura metálica y arquitectura
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
Estrategia de apoyo tecnología miguel angel solis
Propuesta BKP servidores con Acronis1.pptx
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
Influencia-del-uso-de-redes-sociales.pdf
Presentación de Redes de Datos modelo osi
Diapositiva proyecto de vida, materia catedra
taller de informática - LEY DE OHM
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
Power Point Nicolás Carrasco (disertación Roblox).pptx
Estrategia de apoyo tecnología grado 9-3
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
Plantilla para Diseño de Narrativas Transmedia.pdf
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
SAP Transportation Management para LSP, TM140 Col18

Seguridades asp.Net

  • 1. SEGURIDADES EN APLICACIONES ASP.NET Elaborado por: David Del Castillo DM Quito, agosto del 2011
  • 2. Creación de un sitio Web con autenticación mediante formulario La comprobación de seguridad se puede hacer de 3 formas: 1- Usando código directo, es decir, en el código de la aplicación tendremos los nombres y las claves. 2- Los nombres de los usuarios y las claves estarán en el fichero Web.config. Se guardara un valor HASH que servirá para comprobar si la clave es "buena". 3- Los nombres y claves se guardan en una base de datos. Incrementa el nivel de seguridad, las claves se guardan como valores HASH. SHA1 es utilizado por defecto en .NET
  • 3. 1.- Usando código directamente: La comprobación se hará al pulsar en el botón LOGIN, por tanto el código estará dentro del evento Click. Se debe importar la librería System.Web.Security •Lo que se hace es comprobar si el nombre y la clave coinciden con lo escrito en el código. • Además podemos obligar al usuario a “loguearse” cambiando en el Web,config la forma de autenticación asi: <authentication mode="Windows" /> - Cambiar por: <authentication mode="Forms"> <forms loginUrl="Login.aspx" /> </authentication>
  • 4. Y también en la parte de “autorización” de esta manera: <authorization> <allow users="*" /> Cambiar por: <authorization> <deny users="?" /> <!-- solo los usuarios autenticados --> </authorization>
  • 5. 2.- Indicando los usuarios en Web.config: - En el fichero Web.config podemos guardar los nombres de usuarios y las claves, de forma que el ASP.NET se encargue de comprobar si debe o no autorizarlo para entrar en nuestro sitio. -Las claves las vamos a guardar como un valor HASH, es decir, un valor numérico que será único para cada una de las claves. - Este código deberá ir en la sección authentication. Asi: <authentication mode="Forms"> <forms loginUrl="Login.aspx"> <credentials passwordFormat="SHA1"> <user name="pepe" password="7550D35A69BE9ACA9AF9C29B880DC3ADEA01BEDC" />
  • 6. 3.- Los nombres y claves se guardan en una base de datos. - Solo deja iniciar una aplicación después de comprobar que el usuario y la clave introducidas son correctos. Pero para saber si la clave introducida es correcta, se busca en una base de datos.
  • 7. -Aquí el código de la función que valida el usuario y clave: private bool comprobarUsuario(string nombre, string clave) { // Conectar a la base de datos SqlConnection cnn = null; // try { // Conectar a la base de datos de SQL Server cnn = new SqlConnection(cadenaCnn); cnn.Open(); // Definir la cadena que vamos a usar para comprobar si el usuario y el password son correctos. // Utilizo parámetros para evitar inyección de código. System.Text.StringBuilder sel = new System.Text.StringBuilder(); // Usando COUNT(*) nos devuelve el total que coincide // con lo indicado en el WHERE, // por tanto, si la clave y el usuario son correctos, // devolverá 1, sino, devolverá 0
  • 8. sel.Append("SELECT COUNT(*) FROM Usuarios "); sel.Append("WHERE Nombre = @Nombre AND Clave = @Clave"); // Definir el comando que vamos a ejecutar SqlCommand cmd = new SqlCommand(sel.ToString(), cnn); // Creamos los parámetros cmd.Parameters.Add("@Nombre", SqlDbType.NVarChar, 50); cmd.Parameters.Add("@Clave", SqlDbType.NVarChar, 40); // // Asignamos los valores recibidos como parámetro cmd.Parameters["@Nombre"].Value = nombre; cmd.Parameters["@Clave"].Value = clave; // // Ejecutamos la consulta // ExecuteScalar devuelve la primera columna de la primera fila // por tanto, devolverá el número de coincidencias halladas, // que si es 1, quiere decir que el usuario y el password son correctos. int t = Convert.ToInt32(cmd.ExecuteScalar()); // Cerramos la conexión cnn.Close(); // // Si el valor devuelto es cero // es que no es correcto. if( t == 0 ) { return false; }
  • 9. Tanto el nombre del usuario como la clave, los pasamos como parámetros de la función. Y se buscarán en la base de datos tal y como los pasemos a esa función. Este código "supone" que accedemos a una base de datos que está indicada en la cadena de conexióncadenaCnn, y que en esa base de datos hay una tabla llamada Usuarios que al menos tiene dos campos, uno llamado Nombre que es del tipo nvarchar y que tiene una longitud de 50 caracteres y el otro llamado Claveque también es del tipo nvarchar y con una longitud de 40 caracteres. Guardar los datos de la clave de forma encriptada Una solución para que el valor de la clave no esté en texto normal, es encriptándola en formato SHA1 al estilo que lo hace ASP.NET.
  • 10. Y este es el código de la función generarClaveSHA1: private string generarClaveSHA1(string nombre) { // Crear una clave SHA1 como la generada por // FormsAuthentication.HashPasswordForStoringInConfigFile // Adaptada del ejemplo de la ayuda en la descripción de SHA1 (Clase) UTF8Encoding enc = new UTF8Encoding(); byte[] data = enc.GetBytes(nombre); byte[] result; SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider(); // This is one implementation of the abstract class SHA1. result = sha.ComputeHash(data); // // Convertir los valores en hexadecimal // cuando tiene una cifra hay que rellenarlo con cero // para que siempre ocupen dos dígitos. StringBuilder sb = new StringBuilder(); for(int i= 0; i< result.Length; i++) { if( result[i] < 16 ) { sb.Append("0"); } sb.Append(result[i].ToString("x")); } // return sb.ToString().ToUpper(); } Para que ese código funcione hay que tener una importación al espacio de nombres, System.Security.Cryptography que es donde se define la clase SHA1CryptoServiceProvider y también a System.Text que es donde se definen las clases StringBuilder y UTF8Encoding.
  • 11. Crear una aplicación Web que utilice un Web Form para realizar la autenticación de los usuarios que quieran navegar por el sitio Web que la utilice.
  • 12. - Creación del proyecto y de la página de Login - Crea un nuevo proyecto en Visual Studio, selecciona el lenguaje y elije el de Aplicación Web. - Pedira un nombre para crearlo en el localhost, en el ejm sera = pruebaLogin. -Cuando Visual Studio termine de crear el sitio, se mostrará el proyecto "inicial“ - 12
  • 13. - Añadimos dos etiquetas, dos cajas de textos y un botón, asi: 13
  • 14. -Para añadir una nueva página, en el menú Proyecto, -selecciona Agregar Web Forms... esto mostrará un diálogo como el mostrado en la figura (el primer caso: Default) 14