I'm adding a "change password" functionality to my webgame http://ninjawars.net , which currently has fixed (and essentially never changing) passwords.
I want to avoid making a mess of it, so I'd like to make sure that I have the basic security bases covered.
Taking what I can pull from facebook's way of doing things, a few points that key points to remember are:
- Require old password (of course).
- Confirm new password input twice.
- log off the account (only on all other pages, somehow)?
- Require a secure password length & that the password fits all the [insert various criteria here] required for passwords on each specific system.
- Require new password to differ from old password.
- Prevent multiple password change attempts.
Facebook also:
- Requires new password to be different from past passwords. (seems like an edge case use)
Those are only the policies that I can glean from the outside UI of facebook's account system. What other security points should I cover when providing a "change password" system?
Edit: In my specific case I intend to be relatively permissive with the [insert various criteria] for what characters will have to go into the password itself. My site isn't a bank, if a player wants to use the password "password1", then they should expect their account to be taken over by their friends. MY FOCUS on the other hand, is on making sure that my site prevents any opportunities for "hostile takeover" via any kind of insecurity in the password changing system itself.
More good points from the answers below:
- Send notice of password changes to user's email.
- Keep change of email and change of password each dependent on each-other.
- Use a secure encrypted (https) connection for such changes.