Lista con los docentes que imparten la materia

Anuncio
UNIVERSIDAD DON BOSCO
FACULTAD DE ESTUDIOS TECNOLÓGICOS
ESCUELA DE COMPUTACIÓN
CICLO: 01/2015
Nombre de la Práctica:
Lugar de Ejecución:
Tiempo Estimado:
MATERIA:
DOCENTES:
GUIA DE LABORATORIO #10
Seguridad en aplicaciones de ASP.NET
Centro de cómputo
2 horas con 30 minutos
Lenguaje de Programación II
Karens Medrano / Hugo Dimas
II. INTRODUCCIÓN TEÓRICA
Seguridad en ASP.NET
La seguridad es un aspecto muy importante de las aplicaciones web ASP.NET. Los temas de esta sección
proporcionan información adicional sobre los problemas de seguridad que se producen en las aplicaciones
web. Se incluye información sobre cómo mitigar las amenazas de seguridad habituales, cómo proteger los
recursos en una aplicación web, y cómo autenticar y autorizar a los usuarios individuales.
ASP.NET, conjuntamente con Microsoft Internet Information Services (IIS), puede autenticar las credenciales
del usuario como nombres y contraseñas mediante los métodos de autenticación siguientes:
 Windows: básica, implícita, y Autenticación de Windows integrada (NTLM o Kerberos).
 Autenticación mediante formularios, con la que crea una página de inicio de sesión y se administra la
autenticación en la aplicación.
 Autenticación mediante certificados de cliente
ASP.NET controla el acceso a la información de los sitios comparando las credenciales autenticadas, o
representaciones de las mismas, con los permisos del sistema de archivos de Microsoft Windows NT o con un
archivo XML que contiene la lista de usuarios autorizados, funciones autorizadas (grupos) o verbos HTTP
autorizados.
ASP.NET funciona junto con Microsoft .NET Framework y Servicios de Microsoft Internet Information Server
(IIS) para ayudar a proporcionar aplicaciones Web seguras. Para ayudar a proteger la seguridad de una
aplicación ASP.NET, se deben llevar a cabo las dos funciones principales que se describen en la siguiente
tabla.
Función de
seguridad
Descripción
Autenticación
Ayuda a comprobar que el usuario es precisamente quien dice ser. La aplicación obtiene las
credenciales (diversas formas de identificación, como nombre y contraseña) de un usuario, y
las valida consultando a una autoridad determinada. Si las credenciales son válidas, se
considera a la entidad que ha enviado las credenciales como una entidad autenticada.
Autorización
Limita los derechos de acceso mediante la concesión o negación de permisos específicos a
una identidad autenticada.
Además, Internet Information Services (IIS) puede conceder o negar el acceso en función de la dirección IP o
del nombre de host del usuario. Cualquier autorización de acceso posterior se realiza mediante la autorización
de la dirección URL del permiso de acceso al sistema de archivos NTFS.
Lenguaje de Programación II
1/8
Guía #9: Master Pages
Es importante entender cómo interactúan todos los diversos subsistemas de seguridad. Puesto que ASP.NET
se basa en Microsoft .NET Framework, el desarrollador de aplicaciones ASP.NET también tiene acceso a todas
las características de seguridad integradas de .NET Framework, como la seguridad de acceso a código y la
seguridad de acceso basada en funciones.
III. MATERIALES Y EQUIPO
Para la realización de la guía de práctica se requerirá lo siguiente:
No.
1
2
3
Requerimiento
Guía de práctica #10: Seguridad en Aplicaciones en ASP.NET
Computadora con Visual Studio 2012 instalado y una instancia de SQL
Server con Management Studio Express
Memoria USB o disco flexible
Cantidad
1
1
1
IV. PROCEDIMIENTO
Ejercicio #1 – Creación de fuentes de datos
Cree una nueva base de datos en SQL Server con el nombre “BDSeguridad” y proceda a crear la siguiente
estructura de tablas.
Ejercicio #2 – Aplicación segura de ASP.NET
1. Abra y edite el archivo web.config que se encuentra en la raíz de la aplicación. En este archivo
procederemos a establecer la forma de autenticación de los usuarios y posteriormente autorizamos los
recursos a los usuarios registrados. Para ello, definimos las dos estructuras “authentication” y
“authorization”. Edite el archivo de tal manera que quede de la siguiente manera.
Lenguaje de Programación II
2
Guía #9: Master Pages
2. Ahora, proceda a agregar las carpetas contenidas en los recursos de esta guia las cuales corresponden
a imágenes, archivos css y archivos javascript.
3. Agregue un Master Page con el nombre “MasterPage.master” y agregue el siguiente marcado a la
página.
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs"
Inherits="MasterPage" %>
<!DOCTYPE HTML>
<html>
<head>
<title>Guia 10 - Seguridad de Usuarios ASP.NET</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<!--[if lte IE 8]><script src="css/ie/html5shiv.js"></script><![endif]-->
<script src="js/jquery.min.js"></script>
<script src="js/jquery.scrolly.min.js"></script>
<script src="js/jquery.dropotron.min.js"></script>
<script src="js/jquery.scrollex.min.js"></script>
<script src="js/skel.min.js"></script>
<script src="js/skel-layers.min.js"></script>
<script src="js/init.js"></script>
<noscript>
<link rel="stylesheet" href="css/skel.css" />
<link rel="stylesheet" href="css/style.css" />
<link rel="stylesheet" href="css/style-xlarge.css" />
</noscript>
<!--[if lte IE 9]><link rel="stylesheet" href="css/ie/v9.css" /><![endif]-->
<!--[if lte IE 8]><link rel="stylesheet" href="css/ie/v8.css" /><![endif]-->
</head>
<body>
Lenguaje de Programación II
3
Guía #9: Master Pages
<form id="form1" runat="server">
<!-- Header -->
<header id="header" >
<h1 id="logo"><a href="/">Página Principal</a></h1>
<nav id="nav">
<ul>
<li>
<asp:Label ID="lblActiveUser" runat="server"
Text=""></asp:Label>
 
<asp:Button class="button special small" ID="btnCerrarSesion"
runat="server" Text="Cerrar Sesión" />
</li>
</ul>
</nav>
</header>
<style>
.pager table{
width: auto !important;
}
</style>
<!-- Main -->
<div id="main" class="wrapper style1">
<div class="container">
<!-- Formulario de Ingreso de Información -->
<section>
<div class="row uniform 50%">
<asp:ContentPlaceHolder id="ContentPlaceHolder1"
runat="server">
</asp:ContentPlaceHolder>
</div>
</section>
</div>
</div>
<!-- Footer -->
<footer id="footer">
<ul class="icons">
<li><a href="#" class="icon
class="label">Twitter</span></a></li>
<li><a href="#" class="icon
class="label">Facebook</span></a></li>
<li><a href="#" class="icon
class="label">Email</span></a></li>
</ul>
<ul class="copyright">
<li>© 2015. All rights
</ul>
</footer>
</form>
</body>
</html>
Lenguaje de Programación II
4
alt fa-twitter"><span
alt fa-facebook"><span
alt fa-envelope"><span
reserved.</li>
Guía #9: Master Pages
4. Ahora, todas las páginas heredaran de la master page creada, por lo que es en este lugar que debemos
de realizar la comprobación del usuario. Esto es así ya que siempre será esta la primera en ejecutarse.
Para ello, proceda a programar el evento Load de la página maestra con el siguiente código.
5. Dentro de la master page, se ha definido igualmente un botón de cerrar sesión. Para ello, proceda a
dar doble clic desde la vista diseño y agregue el siguiente código.
6. Ahora, procederemos a crear nuestra página de inicio de sesión que hemos definido en nuestro
archivo Web.Config. Para eso, agregue una nueva página “Login1.aspx” y que tenga como página
maestra la página creada en el punto anterior. Ahora, agregue el siguiente marcado, en el cual
hacemos uso de un control login, el cual configuramos detalladamente.
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<style>
table{
width: 40% !important;
margin: 0 auto;
}
.row>* {
float: none !important;
}
</style>
<asp:Login ID="LoginUser" runat="server" DestinationPageUrl="~/Default.aspx"
DisplayRememberMe="true" >
<LayoutTemplate>
<div class="row uniform 20%">
<div class="10u 12u$(xsmall)">
<h3>Inicio de Sesión
</h3>
<div class="12u$(xsmall)">
<asp:Label runat="server" Text="Nombre de
Usuario"></asp:Label>
<asp:TextBox ID="UserName"
runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ForeColor="Red" Display="Dynamic"
ControlToValidate="UserName" ID="RequiredFieldValidator1" runat="server"
ErrorMessage="Campo obligatorio"></asp:RequiredFieldValidator>
Lenguaje de Programación II
5
Guía #9: Master Pages
</div>
<div class="12u$(xsmall)">
<asp:Label runat="server" Text="Contraseña"></asp:Label>
<asp:TextBox ID="Password" runat="server"
TextMode="Password"></asp:TextBox>
<asp:RequiredFieldValidator ForeColor="Red" Display="Dynamic"
ControlToValidate="Password" ID="RequiredFieldValidator2" runat="server"
ErrorMessage="Campo obligatorio"></asp:RequiredFieldValidator>
</div>
<div class="12u$(xsmall)">
<br />
<asp:Checkbox id="RememberMe" runat="server"
Text="Recordarme"></asp:Checkbox>
<br />
<asp:LinkButton ID="submitLoginBtn" CssClass="button special"
CommandName="Login" runat="server">Iniciar Sesión</asp:LinkButton>
 
<a href="NuevoUsuario.aspx" class="button
special">Registrarme</a>
</div>
<div class="12$(xsmall)">
<asp:Literal ID="FailureText" runat="server"
EnableViewState="False"></asp:Literal>
</div>
</div>
</div>
</LayoutTemplate>
</asp:Login>
</asp:Content>
7. Ahora, proceda a codificar el evento “Page_Load” de la página Login1.aspx en su archivo de código
subyacente con el siguiente código.
8. Ahora, procederemos a agregar un método el cual nos será útil para verificar si el usuario existe o no.
Al final, nos interesa que el método nos retorne un valor booleano para realizar la comparación.
Proceda a digitar el siguiente código. Recuerde modificar el código de tal manera que coincida con la
cadena de conexión propia de su computadora y de su base de datos.
private bool ValidateUser(string userName, string passWord)
{
SqlConnection conn;
SqlCommand cmd;
string lookupPassword = null;
// Buscar nombre de usuario no válido.
Lenguaje de Programación II
6
Guía #9: Master Pages
// el nombre de usuario no debe ser un valor nulo y debe tener entre 1 y 15
caracteres.
if ((null == userName) || (0 == userName.Length) || (userName.Length > 15))
{
System.Diagnostics.Trace.WriteLine("[Proceso:ValidarUsuario] Validacion de
nombre de usuario fallida.");
return false;
}
// Buscar contraseña no válida.
// La contraseña no debe ser un valor nulo y debe tener entre 1 y 25 caracteres.
if ((null == passWord) || (0 == passWord.Length) || (passWord.Length > 25))
{
System.Diagnostics.Trace.WriteLine("[Proceso:ValidarUsuario] Validacion de
contrasenia fallida");
return false;
}
try
{
// Consultar con el administrador de SQL Server para obtener una conexión
apropiada
// cadena que se utiliza para conectarse a su SQL Server local.
conn = new SqlConnection("Data Source=REEG;Initial
Catalog=BDSeguridad;Integrated Security=True");
conn.Open();
// Crear SqlCommand para seleccionar un campo de contraseña desde la tabla de
usuarios dado el nombre de usuario proporcionado.
cmd = new SqlCommand("Select Clave from Usuarios where Usuario=@userName",
conn);
cmd.Parameters.Add("@userName", SqlDbType.VarChar, 25);
cmd.Parameters["@userName"].Value = userName;
// Ejecutar el comando y capturar el campo de contraseña en la cadena
lookupPassword.
lookupPassword = (string)cmd.ExecuteScalar();
// Comando de limpieza y objetos de conexión.
cmd.Dispose();
conn.Dispose();
}
catch (Exception ex)
{
// Agregar aquí un control de errores para la depuración.
// Este mensaje de error no debería reenviarse al que realiza la llamada.
System.Diagnostics.Trace.WriteLine("[ValidateUser] Exception " + ex.Message);
}
// Si no se encuentra la contraseña, devuelve false.
if (null == lookupPassword)
{
// Para más seguridad, puede escribir aquí los intentos de inicio de sesión con
error para el registro de eventos.
return false;
}
// Comparar lookupPassword e introduzca passWord, usando una comparación que
Lenguaje de Programación II
7
Guía #9: Master Pages
distinga mayúsculas y minúsculas.
return (0 == string.Compare(lookupPassword, passWord, false));
}
9. Ahora, en la vista diseño, de doble clic al control Login agregado, y proceda a programar el evento
asociado a la validación. Agregue el siguiente código.
10. Vamos a agregar una nueva página Default.aspx la cual tendrá como página maestra asociada, la
MasterPage.master creada anteriormente. Dentro de la etiqueta de esa página digite el siguiente texto:
11. Agregaremos ahora una nueva página con el nombre “NuevoUsuario.aspx” la cual hemos definido
igualmente en nuestro Web.Config. La diferencia radica en que esta página se encontrará disponible
para todos los usuarios de la aplicación. El marcado de esa página se muestra a continuación.
12. Proceda a ejecutar la página Default.aspx y luego seleccione un registro para editar, modifique algún
dato y posteriormente guarde los cambios. Pruebe además agregando un nuevo producto.
V. ANÁLISIS DE RESULTADOS
1. Modifique el archivo NuevoUsuario.aspx de tal manera que permita agregar mas usuarios, con la
dificultad que debe hacer uso del control CreateUserWizard de la suit de .NET
1.
VI. BIBLIOGRAFÍA
Thierry GROUSSARD. (2013). C# 5: Los fundamentos del lenguaje – Desarrollar con Visual Studio 2012 .
Barcelona: ENI.
Lenguaje de Programación II
8
Descargar