2017-09-03 13 views
1

私はFlaskで次のログインを行いました。今私はそれが安全かどうか疑問に思います。もし私が何かを強化するために追加する必要はありません。私はSSLのようなものも重要だと知っていますが、私はフラスココードをより安全にするために何ができるのかに興味があります。フラスコのログインは安全ですか?

#Login 
@app.route('/', methods=['GET', 'POST']) 
def index(): 
    form = LoginForm() 

    if form.validate_on_submit(): 
     user = User.query.filter_by(username=form.username.data).first() 
     if user: 
      if bcrypt.check_password_hash(user.password, form.password.data): 
       login_user(user) 
       return redirect(url_for('dashboard')) 

     return render_template('login.html', form=form, ermsg="Invalid credentials") 

    return render_template('login.html', form=form) 

#Sign up 
@app.route('/signup', methods=['GET', 'POST']) 
def signup(): 
    form = RegisterForm() 

    if form.validate_on_submit(): 
     pw_hash = bcrypt.generate_password_hash(form.password.data, 12) 
     new_user = User(username=form.username.data, email=form.email.data, password=pw_hash) 
     db.session.add(new_user) 
     db.session.commit() 

     return render_template('login.html', form=form, sumsg="User created!") 

    return render_template('signup.html', form=form) 

答えて

1

ログインプロセスは安全と思われます。

ただし、登録フォームまたは既存の電子メールアドレスで既存の潜在的なユーザーを確認していません。これが基礎となるUserスキーマによって管理されていない限り。

パスワードの複雑さを最小限に抑える必要があります。 Danjgoはこれをデフォルトで行いますが、passwordmeterパッケージはこれを達成するのに役立ちます。

https://pypi.python.org/pypi/passwordmeter

+0

ありがとうございます。私のセッションは安全ですか?セッションを保護するためにflask_securityの一部であるuser_datastoreを追加する必要がありますか? – user3080315

+0

はい、ホイールを再発明するのではなく、よく知られたFlask-Securityのような必須のアドオンを使用するのがよい方法です。 – glenfant

1
  • ユーザ名が存在するときにのみ、bcryptのを行うので、それはaccount enumeration via timing attacksに対して脆弱です。ユーザーが存在しない場合は、ダミー計算を追加して修正できます。重大な問題ではありませんが、少なくともそれに気づくべきです。

  • あなたはbcryptの選択にはうまくいきましたが、少なくとも私は@glenfantに同意します。ただし、NIST's new password guidelinesをお読みになることをお勧めします。ユーザーを悩ます伝統的なガイドラインに従わないでください。