SSLなしではない
パスワードがプレーンテキストでネットワーク経由で送信される場合、これは安全ではありません。パスワードがプレーンテキストでネットワーク経由で送信される場合、サーバー側でのパスワードのハッシュも安全ではありません。
HTML <input type="password"/>
タグの内容はプレーンテキストで送信されるため、WebサイトでSSLを使用してパスワードを送信しない限り、サーバーにパスワードを保存する方法に関係なく、これは問題になります。
(ブラウザでパスワードを要求するダイアログボックスを表示するHTTP認証は、サーバーとブラウザに共通の認証メカニズムに応じて、クリアテキストである場合とそうでない場合があります。 SSL。)
サイト管理者が疑わしい場合ではない
ここで、Webサイトの実行にHTTPSを使用していると仮定すると、サイト管理者(プレーンテキストのパスワードを読み取ることができる)およびマシンにアクセスできる他の人が正しく動作することを信頼する場合、これは安全です。今、彼らはあなたのウェブサイトで彼らが望むことを何でもできることは明らかかもしれません(彼らはそれを管理しているので)が、彼らがパスワードを読むことができれば、他の人のサイトで盗まれたログイン/パスワードのペアを使用することもできるかもしれません。
パスワードを管理者から安全に保つ方法
パスワードを保存および確認する安全な方法の1つは次のとおりです。
def change_password user, new_password
salt = random(65536).to_s(16) #will be 4 characters long
password_hash = salt + hash(salt + new_password)
store(user,password_hash)
end
def does_password_match? user, entered_password
correct_password_hash = retrieve(user)
salt = correct_password_hash[0...4]
entered_password_hash = salt + hash(salt + entered_password)
return correct_password_hash == entered_password_hash
end
ハッシュ関数には、強力なものと、まだ良いレインボーテーブルを持たないものを使用してみてください。必要に応じて、レインボーテーブルを回避してソルトの長さを変更できます。
使用している環境、ネットワークレイテンシの変動、およびユーザー名が一般に知られているかどうかhash('0000'+entered_password)
に応じて、攻撃者からの攻撃を防ぐために、ユーザーが存在しない場合は別のコードパスを計算することができますかかった時間に基づいて有効なユーザー名を判別すると、パスワードが正しくないと判断されます。