-1

http://www.128bitstudios.com/2011/11/21/authentication-with-sinatra/

シンプルで素敵な Sinatra BCrypt 認証システム - 説明をいただければ幸いです =)

BCrypt を使用して一緒に Sinatra 用に作成された非常に単純な認証システムに関するこの非常に優れた記事を見つけました。これは素晴らしくシンプルで、優れた古典的なコードが続いていると思います。

しかし、私はそれを理解するのに苦労しています。はい、私は初心者です。少なくともコードの一部を説明していただけると本当にありがたいです。私が特に興味を持っているのはこの部分です

post "/signup" do
  password_salt = BCrypt::Engine.generate_salt
  password_hash = BCrypt::Engine.hash_secret(params[:password], password_salt)

  #ideally this would be saved into a database, hash used just for sample
  userTable[params[:username]] = {
    :salt => password_salt,
    :passwordhash => password_hash 
  }

  session[:username] = params[:username]
  redirect "/"
end

post "/login" do
  if userTable.has_key?(params[:username])
    user = userTable[params[:username]]
    if user[:passwordhash] == BCrypt::Engine.hash_secret(params[:password], user[:salt])
      session[:username] = params[:username]
      redirect "/"
    end
  end
  haml :error
end

私は、そのようなことで私よりもはるかに優れた人によって書かれたことを考えると、コードに問題はないと思いますが、エラーが含まれている可能性がありますが、ほとんどの場合そうではありません. 私は Sinatra と BCrypt の使用の両方にまったく慣れていないので、誰かが手順とパスワードを暗号化する方法を説明していただければ幸いです。

リンクにアクセスすると、残りのコードはすべてそこにあります。ここにすべてを貼り付けても意味がありません。

また、BCryptEngine がユーザーの param :password からソルトを作成することを正しく理解していると思いますが、ユーザーをテーブルやその他すべてのものに保存する方法を理解できません。ありがとう :)

4

1 に答える 1

1

このようなものを実装したい場合は、ここで単純に質問するのではなく、少なくとも自分が何をしているのかを理解する必要があります。ユーザーデータをリクエスト間で保持されないハッシュに保存するなどの簡単なことがあるため、ユーザーデータを保存する場所がわからない限り、実装する意味がありません。今のところ、データベースが最良の答えかもしれません。

ソルトはユーザー パスワードから作成されるのではなく、BCrypt によって生成され、userTable ハッシュに格納されます。ハッシュ化されたパスワードとともに。サインアップ ルーチンでは、userTable は新しいユーザーを含むエントリを取得しますが、そのハッシュをどこかに保存しない限り、次の要求の後に失われます。

最初に基本的な Ruby の使用法を読むことをお勧めします。アプリにセキュリティを実装したい場合、何をしようとしているのかを理解することは理にかなっています。それ以外の場合、セキュリティが確保されているかどうかは、多かれ少なかれ純粋な可能性です。

于 2013-02-01T08:42:35.457 に答える