こんにちはフォーク、 最初に私はCSharpを初めて使っていると言いたいので、MySQLとの接続を作成する方法が間違っていることを知らなかったのですそのため私はPrepared Statementでそれを変更しなければなりませんでした。親切にしてください!MySQLでCSHARP準備文が動作しない
これは私がそれを動作させようとしている方法です。
[HttpPost]
public ActionResult ValidatesLogin (User eUser)
{
var Email = eUser.Email;
var Password = eUser.Password;
try
{
MySqlCommand cmd = MySqlConn.cmd;
cmd = new MySqlCommand(" from User " + "WHERE [email protected] " + "AND [email protected]",
MySqlConn.conn);
cmd.Prepare();
cmd.Parameters.AddWithValue("@email", username);
cmd.Parameters.AddWithValue("@password", password);
int result = (int)cmd.ExecuteReader();
//encrypting the login user password
//the encrypter and decrypter must have same key which is 'kahat' below
var encryptpassword = EncryptHelper.EncryptString(eUser.Password, "kahat");
// Returns true when username and password match:
if (result > 0)
{
System.Web.Security.FormsAuthentication.SetAuthCookie(eUser.Email, false);
return RedirectToAction("Index", "Index", new { area = "Index" });
}
else
{
TempData["Message"] = "Login failed. Email or password supplied doesn't exist.";
return View("Index");
}
}
catch (Exception ex)
{
return ThrowJsonError(ex);
}
}
以下、このコードは非常にうまく機能し、私の実際の接続です。
[HttpPost]
public ActionResult Validate(User eUser)
{
try
{
//Pull email and password from login page
var Email = eUser.Email;
var Password = eUser.Password;
//Pull first email and password from database
var currentUser = this.rpGeneric.Find<User>(" from User WHERE Email=:email ", new string[] { "email" }, new object[] { Email }).FirstOrDefault();
//encrypting the login user password
//the encrypter and decrypter must have same key which is 'kahat' below
var encryptpassword = EncryptHelper.EncryptString(eUser.Password, "kahat");
//Comparing user password in login page and current password in db
if (currentUser != null && encryptpassword.Equals(currentUser.Password, StringComparison.Ordinal) && currentUser.EmailConfirmed == true)
{
System.Web.Security.FormsAuthentication.SetAuthCookie(eUser.Email, false);
return RedirectToAction("Index", "Index", new { area = "Index" });
}
else
{
TempData["Message"] = "Login failed. Email or password supplied doesn't exist.";
return View("Index");
}
}
catch (Exception ex)
{
return ThrowJsonError(ex);
}
}
の下に指摘したようにタイプミスがでない限り、あなたのクエリで
SELECT
句が欠落しているように、見えます!あなたの質問は、入力したユーザーを直接クエリと比較するため、これを行うことを示唆しています。 https://stackoverflow.com/questions/1054022/best-way-to-store-password-in-database –**パスワードをプレーンテキスト**に保管しないでください。パスワードを暗号化しないでください。攻撃者がDBを取得すると、暗号化キーを取得します。ハッシュ関数を使うだけでは不十分で、単に塩を追加するだけでセキュリティを向上させることはほとんどありません。約100msの間、ランダムな塩でHMACを繰り返し、塩をハッシュで保存します。 'ehash'、' PBKDF2'、 'Bcrypt'、' passlib.hash'などの関数を使用してください。要点は、攻撃者が無差別にパスワードを見つけるのに多くの時間を費やすことです。 – zaph
ありがとうございます –