[Zope-PTK] Re: Proposal: password policy change
Bill Anderson
bill@libc.org
Fri, 25 Aug 2000 10:14:05 -0600
Shane Hathaway wrote:
>
> Bill Anderson wrote:
...
>
> > Here, I presume the following:
> > o getPassword becomes _getPassword, implemented in the UserSource.
>
> Not necessary. getPassword() is already inaccessible via the web and
> DTML because of the getPassword__roles__ = () attribute. When Brian
> finishes the new security assertion declarations, we'll be able to
> spell that in a friendlier way.
Ahh, sweet.
> getPassword() has the advantage that it can be overridden in a ZClass.
True.
> > o mailPassword is defined in the UserSource
> > this calls _getPassword() which returns the password.
> >
> > If the passord is encrypted (look at the way it is stored, or consult the policy .. or both), mailPassword would then
> > decide whether or not it needed to set new password, and return that, or just return the password.
> >
> > The UI just says, 'gimme the password'. It doesn't need to know, nor should it need to, the policy details.
> >
>
> Correct, but the *user* needs to be informed of what's happening. It
> would display either:
>
> "Your password is being mailed to you."
>
> or:
>
> "A random, temporary password has been generated for you and is being
> mailed to you. The temporary password will expire in 24 hours."
See below.
> > > 2) Sometimes an encrypted password is enough to break in. Consider how
> > > many people use dictionary words as their password. getPassword(),
> > > therefore, should never return an encrypted password.
> >
> > I've thought of that, and it would it be useful outside of an insecure policy? It could be done in the UserSource, and
> > changed to _getPassword (as mentioned above). This would prevent it from being called through the web. The
> > authentication being done in python, could access it.
>
> A side note: there is a testPasswordValidity() method in
> portal_membership that can be used to enforce good passwords.
yeah, I've seen it.
> > > 3) The UI, which is mail_password_form, needs to be aware of the policy
> > > in effect and provide different instructions for each case.
> >
> > Why? The mail_passwordForm should hust have to call getPassword, which would be interpreted by the underlying mechanisms
> > as to whether or not it needs to just return it, or it needs to set a new one, and return that. This, it seems to me,
> > would also preserve the UI across other forms of authentication, such as against an SQL database (could be either
> > encrypted or CT), RADIUS, LDAP, etc.
> >
> > If the underlying functions have the werewithal to perform the required task, the UI is near universal.
> > o User forgets password.
> > o User asks for help
> > o User gets instructions on how to log in, and what password to use.
> > o User logs in.
>
> Don't you think it's more user friendly to just provide details on
> what's going to happen next? It's really not any more work on our
> part.
The UI can check the policy, and display details based on the set policy, no?
> Also, consider this example: I am a security conscious user and I know
> that passwords sent via email are readable by anyone along the long and
> twisty path. But I forget my password, it's late at night, and I don't
> want to wake up the sysadmin. I go to a page that says "click the
> button below to solve my password problem". What is that supposed to
> mean?
If a policy were to have a 'property' of something like "forgotten_password_description" (or a better name), than the UI
(and the mailPassword method) can simply &dtml-forgotten_password_description; it. This has the nice advantage of a
completely fluid UI. You don't need to worry about changing the form if you create a new policy, or if you change it;
and I don't need to make a half-dozen forms for different policies that would be in the default options.
It boils down to me investigating exactly how policies are implemented, or should be. :-)=
Bill
--
Do not meddle in the affairs of sysadmins, for they are easy to annoy,
and have the root password.