Сброс пароля в Asp.net не работает - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь разрешить пользователю сбрасывать / обновлять пароль в случае, если он забыл, что он совпадает с именем пользователя и его полный порядок сброса пароля. Тем не мение; Я получаю сообщение об ошибке, имя пользователя и имя не совпадают, даже если они совпадают.

 string strConnString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
string str = null;
SqlCommand com;
byte up;
protected void btn_update_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(strConnString);
    con.Open();
    try
    {
        string un, pw;
        un = txtUsername.Text;

        pw = Encrypt(txt_npassword.Text, "mykey");
        SqlCommand command = new SqlCommand("PP_spReset", con);

        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.Add("@UserName", SqlDbType.VarChar).Value = un;

        command.Parameters.Add("@password", SqlDbType.VarChar).Value = pw;

        con.Open();


        int rowupdated = command.ExecuteNonQuery();
        if (rowupdated > 0)
        {
            Response.Redirect(@"~/Account/Login.aspx"); ;
        }
        else
        {
            lbl_msg.Text = "Username does not exist";
        }

    }
     catch (Exception ex)
    {
        throw ex;
    }

}

public string Encrypt(string source, string key)
{
    TripleDESCryptoServiceProvider desCryptoProvider = new TripleDESCryptoServiceProvider();
    MD5CryptoServiceProvider hashMD5Provider = new MD5CryptoServiceProvider();

    byte[] byteHash;
    byte[] byteBuff;

    byteHash = hashMD5Provider.ComputeHash(Encoding.UTF8.GetBytes(key));
    desCryptoProvider.Key = byteHash;
    desCryptoProvider.Mode = CipherMode.ECB; //CBC, CFB
    byteBuff = Encoding.UTF8.GetBytes(source);

    string encoded =
        Convert.ToBase64String(desCryptoProvider.CreateEncryptor().TransformFinalBlock(byteBuff, 0, byteBuff.Length));
    return encoded;
}

1 Ответ

0 голосов
/ 28 августа 2018

Ваша первая проблема связана с обработкой ошибок, невозможно узнать, что это за ошибка, потому что вы ее маскируете.

У вас есть несколько вариантов, но вам нужно определить ошибку (я определил ее как e):

Вариант 1. Запишите его в свое сообщение (не следует делать это в рабочей среде, поскольку это предоставит клиенту (потенциальному хакеру) слишком много информации о вашей инфраструктуре, но это только начало).

Вариант 2. Бросьте исключение, пусть IIS решит, что делать. В режиме DEV установите атрибут customErrors в вашем конфигурационном файле:

<customErrors mode="RemoteOnly"></customErrors>

Вариант 3 - дать дружеское сообщение, но записать информацию либо на сервер (файл) или базу данных Однако этот код будет отличаться в зависимости от того, как вы его реализуете.

В любом случае вам НУЖНО знать, в чем заключается ошибка, иначе вы не сможете ее исправить. Для простоты у меня есть обновление кода, относящееся к # 2, но в процессе работы вы действительно должны в конечном итоге использовать # 3.

catch (Exception e)
{
    throw e;
}

Кроме того, у вас есть проблема внедрения SQL, которую необходимо исправить с помощью параметров SQL. Вот несколько сообщений на эту тему:

  1. Что такое SQL-инъекция?
  2. Как можно предотвратить внедрение SQL-кода?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...