2017-02-12 7 views
3

一致するパスワードを確認するための業界標準またはベストプラクティスに関する情報を持っている人はいませんか(例:Gmailの「パスワードは一致しません」というフィードバック)ですか?それはバックエンド、フロントエンドまたはクライアント側のプロセスですか?それは完全に他の要因に基づいて?ここでフロントエンドまたはバックエンドと一致するパスワード?

コードが動作します。私は、ユーザーがサインアップする(Bottleとパイソン)を使用していたコードの例ですが、私は後ろからflash messageを提供する必要があるかどうかわかりませんよ(パスワードが一致しない場合)JSを使用する方が良いでしょうか?これを検証するためのスクリプトがありますが、すべてJSです。私の質問はそれを行う方法ではありませんJSを使用していますが、これが好ましい方法です。

@route('/suser', method='POST') 
def sign_suser(): 
    cemail = request.forms.get('semail') 
    cpassword1 = request.forms.get('spass1') 
    cpassword2 = request.forms.get('spass2') 
    ctype = request.forms.get('stype') 
    if cpassword1 != cpassword2: 
     return "<p>Passwords do not match</p>" 
    else: 
     pwhash = crypt(cpassword1) 
     connection = sqlite3.connect("whatever.db") 
     cursor_v = connection.cursor() 
     cursor_v.execute("insert into users (cemail, cpassword, atype) values (?,?,?)", (cemail,pwhash,ctype)) 
     connection.commit() 
     cursor_v.close() 
     info = {'status': 'User Added', 
       'type': 'success'} 
     return template('whatever',info) 
+2

バックエンドは常にチェックを行うものですが、JavaScriptからXMLHttpRequestを使用してログインリクエストを送信できます。それを単純に保つために、今のところバックエンドからのメッセージを貼り付けることをお勧めします。 – Ryan

+1

チェックは常にバックエンドで行う必要があります。表示されているメッセージについては、送信するHTTPリクエストの応答に従って、JavaScriptでメッセージを表示できます。 – Visrozar

+4

2番目のパスワードは、ユーザーが入力ミスを防ぐためのものです。これは、クライアント側フォームの検証に属します。私は要求に1つのパスワード文字列を送るだけです。 – Daniel

答えて

5

サインアップ中に2つのパスワードフィールドが一致するかどうかを調べるには、純粋にクライアントサイドロジックを使用する必要があります。誤って入力ミスをパスワードに挿入した場合の安全対策として提供されています。あなたのクライアントがそれを阻止し、あなたのユーザーがカールしているすべてのことを行う技術に精通した個人であれば、サーバー側のチェックは無意味です。

また、ベストプラクティスについてのご質問にもお答えします。あなたはすぐにあなたのデータベースにユーザを保存してはいけません。まず、あなたの電子メールに送られたリンクを介して、それが有効であることを確認する必要はありません。覚えておいてください。

+1

意味があり、特に2番目の部分!ありがとうございました –

-1

次の2つのケースを区別する必要があります。

  1. あなたがバックエンドデータベースまたは任意の非共有可能な技術を使用せずに値を検証することができません。この場合、バックエンドでチェックすることしかできません(たとえば、AjaxコールやWebSocket経由の通信など)。この種の検証の例としては、ユーザー名/パスワードの検証やデータベースへの接続が必要なもの、公開できないロジックで値をチェックする専用のアルゴリズム
  2. 値を確認することなく値を検証することができますバックエンド(データベース)。この場合、パフォーマンス上の理由でフロントエンド/クライアント側にチェックを移すことができます。間違った値(攻撃の場合、JavaScriptの破損など)に対してバックエンドを保護する必要があります。電子メールアドレスの検証、電話番号の検証などについては

バックエンドからの応答がある場合、私はちょうど(値を提出するとき、または入力中のいずれかのバックエンドへの定期的な接続を使用します十分に速い)。 については

、あなたはいくつかのオプションがあります:

  • がのようにそれを実行してください。送信中または入力中にバックエンドチェックを行います。これにはパフォーマンスの問題があるかもしれません(主にキーダウン時にチェックしている場合)。提出後に確認している場合、検証はリアルタイムではありません。
  • フロントエンド側とバックエンド側で別々に検証します。あなたがしている場合。これはではなく、を推奨します。フロントエンドとバックエンドの間でコードを複製しています。できるだけ避けてください。
  • フロントエンドとバックエンドで共有の検証パターンを使用します。これは値を検証するための私の推奨方法です。チェックが正規表現(正規表現)で行われる場合、この検証は最も効果的です。バックエンドには、フロントエンドへのインタフェースを介して提供されるパターンのMap()があります。パターンは、Webアプリケーションがロードされたときに最初にロードされ、アプリケーションのランタイム中に存在します。これにより、検証は常にバックエンドとフロントエンド側で同じであることが確認されます。

あなたの例では、しかし、これらのパスワード(平等性チェック)のマッチングを含みます。正規表現を使用して値の妥当性をチェックすることはできないため、これは特殊なケースです。これは上記の推奨ケースを排除し、言及された2つの解決策を残す。

2つの値を比較する唯一の目的があれば、ロジックを複製することをお勧めします。チェックは非常に簡単で時間の経過とともに変更される可能性が低いので、複製(imho)は多少正当です。バックエンドにチェックを入れて、平等のためにsoleyのチェックをすると、(イホ)は誇張されます。

+1

あなたの答えは長く、本当に質問が本当に求めていることを完全に逃しています。 – Darkrum

関連する問題