OWASP Quebec: "Security Stories" par Guillaume Croteau
Securité asp.net
1. Formation Dotnet Ahmed LABIDI ingénieur études et développement Dotnet SQL Server
1
Sommaire
I. Sécurité ASP.Net ............................................................................................................................. 1
1. Les balises authentification et autorisation................................................................................... 1
2. L’autorisation à un fichier particulier............................................................................................ 2
3. La destruction des cookies............................................................................................................ 4
I. Sécurité ASP.Net
1. Les balises authentification et autorisation
A la fin du fichier web.config
<!--The <authentication> section enables configuration
of the security authentication mode used by
ASP.NET to identify an incoming user.-->
<authentication mode="Forms">
<forms loginUrl="login.aspx" protection="All" path="/" name="users">
</forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</configuration>
On doit remplacer “loginUrl="login.aspx" par la page login correspondante.
<deny users="?"/>
Ici nous somme entrain de bloquer tout le site. Le déblocage aura lieu lors de l’ouverture d’une nouvelle
session soit par « tuer » les cookies (on va voir par la suite comment faire)
Après avoir placé ce bous de code, si on essaye de forcer un lien dans la barre des adresses :
Le système renvoie la page automatiquement à login.aspx comme suit :
2. Formation Dotnet Ahmed LABIDI ingénieur études et développement Dotnet SQL Server
2
2. L’autorisation à un fichier particulier
Après le lancement de la page login, on remarque que le style de la page master page n’est pas appliqué.
Comme suit :
Cela est dû du faite que le fichier style.css n’est pas autorisé à être exécuté (vu qu’on a utilisé
«DENY » = «ne pas permettre » dans la balise autorisation)
Alors on doit spécifier un bout de code pour l’autorisation d’un dossier particulier
3. Formation Dotnet Ahmed LABIDI ingénieur études et développement Dotnet SQL Server
3
Dans ce cas, on remarque bien qu’on a utilisé <allow users="?"/>
C'est-à-dire permettre l’utilisateur à accéder au fichier style.css se trouvant dans le fichier img
L’attribut allowOverride="false : Ici on donne un ordre au système de ne pas remplacer le fichier
img (pour des besoins de sécurités, le système remplace les fichiers par des fichiers vides afin de
garantir la sécurité)
Alors on va avoir le résultat suivant :
4. Formation Dotnet Ahmed LABIDI ingénieur études et développement Dotnet SQL Server
4
3. La destruction des cookies
La sécurité touche aussi la redirection, c'est-à-dire que RESPONSE.REDIRECT (qui fait la redirection à une
autre page) n’est plus fonctionnelle comme d’habitude. Cela est du que le système crées des cookies
(des fichiers temporaires utilisées par le système) afin de sécuriser le site.
L’idée consiste à détruire les cookies, juste avant la redirection vers la page suivante (par rapport à la
page login). Ce travail n’est nécessaire que pour la page login
On doit tout d’abord importer la bibliothèque de sécurité spécifique au framework DotNet :
using System.Web.Security;
Le code de la page Login.aspx .cs devient comme suit :
5. Formation Dotnet Ahmed LABIDI ingénieur études et développement Dotnet SQL Server
5
protected void Page_Load(object sender, EventArgs e)
{
this.lblerr.Visible = false;
}
protected void btn_Valider_Click(object sender, EventArgs e)
{
SqlConnection cn = new SqlConnection();
cn = Class1.GetConnection();
String txtReq = "Select * from Etudiant where Login = '" + this.txtLogin.Text + "'
"
+ " and pwd = '" + this.txtPwd.Text + " '";
DataTable dt;
dt = Class1.Executer_Requete(txtReq, cn, "tb_Etu");
if (dt.Rows.Count == 0)
{
this.lblerr.Text = "Veuillez vérifier vos paramètres de connexion";
this.lblerr.Visible = true;
}
else
{
// iCi nous somme entrain de tuer les cookies avant de permettre la redirection
FormsAuthentication.SetAuthCookie("",false);
Response.Redirect("Frm_Etd_m.aspx");
}
}