Contraseñas y DotNetNuke
DotNetNuke ofrece cierta flexibilidad en la gestión de las contraseñas de usuarios. Ésta no es una cuestión baladí, pues nuestros preciosos portales web suelen contener datos personales, sujetos a la normativa vigente. Dependiendo de la naturaleza de esos datos podríamos ser especialmente estrictos con su custodia, y la configuración predeterminada de DotNetNuke no sería suficiente.
Tan didáctico como siempre Mitchel...
DotNetNuke ofrece cierta flexibilidad en la gestión de las contraseñas de usuarios. Ésta no es una cuestión baladí, pues nuestros preciosos portales web suelen contener datos personales, sujetos a la normativa vigente. Dependiendo de la naturaleza de esos datos podríamos ser especialmente estrictos con su custodia, y la configuración predeterminada de DotNetNuke no sería suficiente.
Tan didáctico como siempre Mitchel Sellers nos explica cómo funcionan las contraseñas en DNN y nos sugiere un par de cambios que reforzarán la seguridad de nuestro sistema.
Resumiendo, DNN viene de serie con las contraseñas de los usuarios encriptadas, en la base de datos, pero fácilmente recuperables aplicando un algoritmo matemático. Eso supone un riesgo pues, si alguien lograse acceder a nuestra base de datos, podría desencriptar esas contraseña (ojo, que podrían estar sin encriptar, algo que no recomendamos). Además, como cualquier usuario puede solicitar un recordatorio de contraseña por correo electrónico, que se envía como texto legible, ahí tenemos otro importante "agujero" de seguridad.
Una forma de evitar esto es guardar las contraseñas como "hashed", de forma que no sea posible su desencriptación; esto lo hacemos modificando el parámetro passwordFormat. Y si cambiamos el parámetro enablePasswordRetrieval será suficiente para evitar que se envíen los recordatorios de contraseña: el usuario que pierda la suya recibirá un mensaje con una temporal, que deberá cambiar la primera vez que acceda al portal.
Por si alguien está suficientemente despistado, estos cambios se hacen en el nodo system.web (os copio la configuración estándar):
<membership
defaultProvider="AspNetSqlMembershipProvider"
userIsOnlineTimeWindow="15">
<providers>
<clear />
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="SiteSqlServer"
enablePasswordRetrieval="true"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
minRequiredPasswordLength="7"
minRequiredNonalphanumericCharacters="0"
requiresUniqueEmail="false"
passwordFormat="Encrypted"
applicationName="DotNetNuke" />
</providers>
</membership>