lunes, 21 de junio de 2010

ASP.NET - Expresiones regulares para contraseñas seguras

form_validate_re El tema de crear una política de constraseñas seguras para los aplicativos es un tema de amplia discusión en las empresas.
Hay ocasiones en los que simplemente se le crea una cuenta a un usuario y se le asigna una contraseña segura, luego este usuario puede cambiar esa contraseña… pero igual debe elegir una contraseña segura.
Y este es el asunto, no todos los usuarios quieren trabajar con contraseñas seguras. Tú dirás:
Se les obliga a usar contraseñas seguras y punto, pero eso no siempre funciona en la vida real.
Muchas veces los dueños de la empresa o la alta dirección quieren usar el password de toda su vida. Tú puedes hacer denodados esfuerzos: les explicas con ejemplos, con videos, con pruebas, etc… hasta que al fin los convences… luego de tu gran esfuerzo te dicen:
pata, yo quiero seguir usando mi viejo password ya?
Qué te queda? renegar y acatar la orden (previo: Yo se lo advertí!!).
Pero como nosotros estamos del lado de los sensatos, vamos a invertir nuestro tiempo creando una funcionalidad que nos genera una expresión regular para exigir contraseñas seguras, basado en las condiciones que elijas.
Código aspx:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<style type="text/css">
*
{
font-family: Verdana, Arial;
font-size: 11px;
height: 21px;
}
table
{
border-collapse: collapse;
background-color: Orange;
}
th
{
background-color: Gray;
color: White;
font-size: 13px;
}
th, td
{
padding: 5px;
white-space: nowrap;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<table>
<tr>
<th>
Expresiones Regulares para contraseñas seguras
</th>
</tr>
<tr>
<td>
<asp:CheckBox ID="chkUpper" runat="server" Text="Incluir mayúsculas" />

</td>
</tr>
<tr>
<td>
<asp:CheckBox ID="chkLower" runat="server" Text="Incluir minúsculas" />

</td>
</tr>
<tr>
<td>
<asp:CheckBox ID="chkDigits" runat="server" Text="Incluir dígitos" />
</td>
</tr>
<tr>
<td>
<asp:CheckBox ID="chkSpecialChars" runat="server" Text="Incluir Caracteres especiales (!@#$%^&amp;*_+-/)" />
</td>
</tr>
<tr>
<td>
<strong>Longitud</strong>
<br />
Mínima: &nbsp;<asp:TextBox ID="txtMin" runat="server" Width="54px"></asp:TextBox> 
<br />
Máxima: <asp:TextBox ID="TxtMax" runat="server" Width="54px"></asp:TextBox>  
<br />
Nota: Si desean una longitud exacta, pongan la misma longitud en ambos textboxes              
</td>
</tr>
<tr>
<td style="text-align: right">
<asp:Button ID="btnGenerate" runat="server" Text="Generar Expresión Regular" />
</td>
</tr>
<tr>
<td style="text-align: center">
<asp:TextBox ID="txtRegularExpression" Width="95%" Rows="5" TextMode="MultiLine"
runat="server"></asp:TextBox>
</td>
</tr>
</table>

<div style="background-color: yellow; margin-top: 30px; height: 70px; width: 500px">
Haga sus pruebas aquí:
<br />
Texto a validar: <asp:TextBox ID="TextBox1" ValidationGroup="test" runat="server"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" ValidationGroup="test" runat="server" 
ControlToValidate="TextBox1" ValidationExpression=""
ErrorMessage="*"></asp:RegularExpressionValidator>
<asp:Button ID="Button1" runat="server" ValidationGroup="test" Text="Validar expresión..." />
</div>

</form>
</body>
</html>

Código VB.NET:

Protected Sub btnGenerate_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnGenerate.Click
Dim RegExp As New StringBuilder

'longitud
If txtMin.Text.Length > 0 AndAlso IsNumeric(txtMin.Text) Then
RegExp.Append("(?=^.{" & txtMin.Text)

If txtMin.Text <> TxtMax.Text Then
RegExp.Append(",")
If TxtMax.Text.Length > 0 AndAlso IsNumeric(TxtMax.Text) Then
RegExp.Append(TxtMax.Text)
End If
End If

RegExp.Append("}$)")
End If

'dígitos
If chkDigits.Checked Then RegExp.Append("(?=.*\d)")

'caracteres especiales
If chkSpecialChars.Checked Then RegExp.Append("(?=.*\W+)")

'mayúsculas
If chkUpper.Checked Then RegExp.Append("(?=.*[A-Z])")

'minúsculas
If chkLower.Checked Then RegExp.Append("(?=.*[a-z])")

RegExp.Append(".*$")

txtRegularExpression.Text = RegExp.ToString
RegularExpressionValidator1.ValidationExpression = RegExp.ToString

End Sub

Es todo, el código está completo, sólo añadan una página aspx y peguen el código respectivo. Luego ejecuten la página, y marquen algunas de las opciones… presionen el botón Generar Expression Regular y la expresión se mostrará en la caja de texto mostrada, Uds pueden usar esta funcionalidad para generar las expresiones regulares que luego le asignarán a su control  asp:RegularExpressionValidator

Aprovecho para recomendarles una herramienta imprescindible para construir / validar expresiones regulares: Expresso.

Como para finalizar el post, te dejo un enlace que genera contraseñas seguras, como para que te ahorres el uso de neuronas generando contraseñas: http://strongpasswordgenerator.com/

;)

No hay comentarios.: