! NOOB ALERT!GRAILS + Spring Security Plugin ---ユーザー追加時にパスワードが暗号化されない
Grails 3.2.9 + Spring Security Plugin 3.1.0のクリーンインストール。
s2-quickstartによって作成されたデフォルトのユーザー/ロール/ユーザーロールドメインcom.raf.appユーザーロール。
ブートストラップ初期化コード:
...
def init = { servletContext ->
def adminRole = Role.findOrSaveWhere(authority: 'ROLE_ADMIN')
def user = User.findOrSaveWhere(username: 'raf',
password: 'password')
if (!user.authorities.contains(adminRole)){
UserRole.create(user, adminRole)
}
...
私は、このユーザのパスワードは(これをチェックアウトするdbconsoleをを使用して)デシベルで符号化された表示されますが、私の場合には、それは(それはだていないことのチュートリアルで見ましたここのような「パスワード」だけ)。
だから私は、ユーザーのドメインに行って、これらの恐ろしい変化作っ:一方
def beforeUpdate() {
encodePassword()
}
protected void encodePassword() {
password = springSecurityService?.passwordEncoder ? springSecurityService.encodePassword(password) : springSecurityService.encodePassword(password)
}
そして、これがnullpointer例外をスローします。どうして?
Cannot invoke method encodePassword() on null object
パスワードを暗号化するにはどうしたらよいですか?
**パスワードを暗号化しない**、攻撃者がDBを取得したときにも暗号化キーを取得します。ハッシュ関数を使うだけでは不十分で、単に塩を追加するだけでセキュリティを向上させることはほとんどありません。約100msの間、ランダムな塩でHMACを繰り返し、塩をハッシュで保存します。 'ehash'、' PBKDF2'、 'Bcrypt'などの関数を使用してください。要点は、攻撃者が無差別にパスワードを見つけるのに多くの時間を費やすことです。 – zaph
@zaph私は、ラファイが既定の暗号化方法を実行できなかった場所で既存のコードを単純に繰り返すと考えています。私はdbテーブルにキーがないので、もう少し春のセキュリティを調べる必要があると思う:) – Vahid
キーのない暗号化! – zaph