Le bout de code du jour nous vient de Christopher Stolworthe. Christopher à un ami qui prépare une soutenance pour obtenir son diplôme universitaire en sciences informatiques. Un jour son ami l'appelle ...
"Il voulait que je teste son nouveau système de login qu'il venait d’écrire en C# et qui utilisait SQL Serveur. J’acceptai et il m'envoya son application. Je fis rapidement le tour de la bête quand je remarquai quelque chose d'intéressant. Après avoir saisi mon nom d'utilisateur, quand je commençais à écrire mon mot de passe, il suffisait que je me trompe d'un seul caractère n’importe où dans le champ, pour que l'application me retourne une erreur. "Ca c'est intéressant" je pensais. Je jetais dont un coup d'œil au code et, après quelques minutes, je découvris ce qui suit. Il ne comprit pas ou était le problème de sécurité avant que je tape "admin" comme nom d'utilisateur et que je commence à deviner son mot de passe."
private void txtHostname_KeyPress(object sender, KeyPressEventArgs e)
{
StringBuilder sb = new StringBuilder();
sb.Append("SELECT Passwd FROM [Users] WHERE Username='");
sb.Append(this.txtUsername.Text + "'");
String password = GetPassword(sb.ToString());
for (int i = 0; i < (sender as TextBox).Text.Length; i++)
{
if (password[i] == (sender as TextBox).Text[i])
{
this.lblError.Text = "";
}
else
{
this.lblError.Text = "Incorrect Password!";
}
if (i == (sender as TextBox).Text.Length)
{
if (password[i] == (sender as TextBox).Text[i])
{
LogUserIn(this.txtUsername.Text);
}
}
}
}