Diskuze: Problém s dotazem v databázi
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj,
ExecuteNonQuery vracia pocet zmenenych riadkov, napr. u insert, update, delete,
atp. V tvojom pripade by si mal pouzit ExecuteReader pre nacitanie vysledku.
M.
V tomhle případě by ti možná stačilo změnit na
Console.WriteLine(logCheck.ExecuteScalar());
Pak nám dej odkaz na web, ať víme kam se nepřihlašovat.
Jo díky moc. Jsem blbej mělo mi to dojít... Jinak reader funguje taky ale je to složitější... A jinak je to localhost Mariane
A to je důvod to dělat nezabezpecene? Není lepší to napsat jednou poradně a pak to používat třeba i v jiných projektech?
Pointa mého příspěvku je ta, že celou dobu mluvíš o "šifrování", ale tak nějak tuším, že tam při první příležitosti narveš SQL injection.
Napsal jsem to co nejjednodušeji, aby byl hned jasný problém... Já to nechápu napíšu to tam i že je to kvůli tomu aby to bylo přehledný a ty mi napíšeš proč to nedělat hned... Jinak finálně to vypadá takto
string hash = String.Empty;
byte[] crypto = new SHA256Managed().ComputeHash(Encoding.ASCII.GetBytes(password), 0, Encoding.ASCII.GetByteCount(password));
foreach (byte theByte in crypto)
{
hash += theByte.ToString("x2");
}
String checkLogQuery = "SELECT * FROM user where name=@name AND password=@password";
MySqlCommand logCheck = new MySqlCommand(checkLogQuery, con);
logCheck.Parameters.AddWithValue("@name", name);
logCheck.Parameters.AddWithValue("@password", hash);
object idRow = logCheck.ExecuteScalar();
Nevím proč bych tam měl rvát SQL injection když je to localhost
Ještě jeden tip. Sha256 sama o sobě je hodně slabá pro uložení hesla. Používáš C#, tak použij PasswordHasher co je v Identity frameworku v3.
https://github.com/…ordHasher.cs
je i ve standardním plném .NETu.
Zobrazeno 10 zpráv z 10.