Колба sha256_crypt.verify, возвращающая `недопустимый хэш sha256_crypt` - PullRequest
0 голосов
/ 31 октября 2019

Я использую Flask для веб-страницы входа. Я пытаюсь использовать шифрование пароля sha256, но я понятия не имею, почему строка sha256_crypt.verify(password,pass_data) выдает ошибку в заголовке.

Что-то мне не хватает? Если я могу дать более подробную информацию, пожалуйста, спросите, возможно, предоставив некоторые инструкции о том, как отлаживать. Спасибо.

@app.route("/login", methods=["GET","POST"])
def login():
   if request.method == "POST":
      username= str(request.form['username'])
      password = request.form.get('password')
      cursor = mydb.cursor(MySQLdb.cursors.DictCursor)
      cursor.execute("SELECT * FROM user WHERE username ='"+ username +"'")
      userdata = cursor.fetchone()
      usernamedata = userdata['username']
      passworddata = userdata['password']
      if usernamedata is None:
        flash("Incorrect username","danger")
        return render_template("login.html")
     else:
        for pass_data in passworddata:
            if sha256_crypt.verify(password,pass_data):
                flash("You are now login","success")
                return redirect(url_for('profile'))
            else:
                flash("Incorrect password!")
                return render_template("login.html")
   return render_template("login.html")

1 Ответ

0 голосов
/ 31 октября 2019

Предполагая, что passworddata является строкой, выполнение for pass_data in passworddata просто зацикливает буквы строки. Я думаю, что изменение этого:

for pass_data in passworddata:
    if sha256_crypt.verify(password,pass_data):
        flash("You are now login","success")
        return redirect(url_for('profile'))
    else:
        flash("Incorrect password!")
        return render_template("login.html")

на это:

if sha256_crypt.verify(password, passworddata):
    flash("You are now login","success")
    return redirect(url_for('profile'))
else:
    flash("Incorrect password!")
    return render_template("login.html")

должно исправить это.

Кроме того, не выполняйте SQL как этот!

cursor.execute("SELECT * FROM user WHERE username ='"+ username +"'")

Это очень склонно к SQL-инъекции .

...