From c8f300b2cdc6f00ba1aeb98c51a534f18474b895 Mon Sep 17 00:00:00 2001 From: Denis Denisov Date: Sat, 3 Dec 2016 07:49:17 +0200 Subject: [PATCH] Safe compare password (timing attack) (#338) --- models/user.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/models/user.go b/models/user.go index 41fdf0b02..40afc4849 100644 --- a/models/user.go +++ b/models/user.go @@ -8,6 +8,7 @@ import ( "bytes" "container/list" "crypto/sha256" + "crypto/subtle" "encoding/hex" "errors" "fmt" @@ -368,7 +369,7 @@ func (u *User) EncodePasswd() { func (u *User) ValidatePassword(passwd string) bool { newUser := &User{Passwd: passwd, Salt: u.Salt} newUser.EncodePasswd() - return u.Passwd == newUser.Passwd + return subtle.ConstantTimeCompare([]byte(u.Passwd), []byte(newUser.Passwd)) == 1 } // UploadAvatar saves custom avatar for user.