[PATCH] privacy: don't tell users what is the reason for a failed login

Mads Kiilerich mads at kiilerich.com
Tue May 19 11:15:30 EDT 2015


On 05/16/2015 05:04 PM, Andrew Shadura wrote:
> # HG changeset patch
> # User Andrew Shadura <andrew at shadura.me>
> # Date 1431788631 -7200
> #      Sat May 16 17:03:51 2015 +0200
> # Node ID cb911e90e205bdb18fc2e2bd66549ea388d00413
> # Parent  388a6eada55925cb55cd2368e47a6115d833b4c1
> privacy: don't tell users what is the reason for a failed login

I think the current implementation is wrong when it does any kind of 
login verification in the user friendly form code. The authentication 
should be done explicitly in the controller. (That would also make the 
email login simpler.)

So while this patch makes it less wrong, I still think it is a bit 
pointless.

/Mads


> Makes it harder for strangers to probe the instance for presence of
> certain users. This can make it harder to break in, as it is now
> harder to tell is a username or a password are wrong, so bruteforcing
> should probably take a bit longer if you don't know what exactly are
> you doing.
>
> diff --git a/kallithea/model/validators.py b/kallithea/model/validators.py
> --- a/kallithea/model/validators.py
> +++ b/kallithea/model/validators.py
> @@ -305,9 +305,7 @@ def ValidPasswordsMatch(passwd='new_pass
>   def ValidAuth():
>       class _validator(formencode.validators.FancyValidator):
>           messages = {
> -            'invalid_password': _(u'invalid password'),
> -            'invalid_username': _(u'invalid user name'),
> -            'disabled_account': _(u'Your account is disabled')
> +            'invalid_auth': _(u'Invalid user name or password')
>           }
>   
>           def validate_python(self, value, state):
> @@ -325,16 +323,15 @@ def ValidAuth():
>                   user = User.get_by_username(username)
>                   if user and not user.active:
>                       log.warning('user %s is disabled' % username)
> -                    msg = M(self, 'disabled_account', state)
> +                    msg = M(self, 'invalid_auth', state)
>                       raise formencode.Invalid(msg, value, state,
> -                        error_dict=dict(username=msg)
> +                        error_dict=dict(username=' ',password=msg)
>                       )
>                   else:
>                       log.warning('user %s failed to authenticate' % username)
> -                    msg = M(self, 'invalid_username', state)
> -                    msg2 = M(self, 'invalid_password', state)
> +                    msg = M(self, 'invalid_auth', state)
>                       raise formencode.Invalid(msg, value, state,
> -                        error_dict=dict(username=msg, password=msg2)
> +                        error_dict=dict(username=' ',password=msg)
>                       )
>       return _validator
>   
> _______________________________________________
> kallithea-general mailing list
> kallithea-general at sfconservancy.org
> http://lists.sfconservancy.org/mailman/listinfo/kallithea-general



More information about the kallithea-general mailing list