Stop people using very common passwords

If a user chooses a very common password then an attacker could guess it
in relatively few attempts, circumventing the lockout.

CESG recommend blacklisting the most common passwords:

> …enforcing the requirement for complex character sets in passwords is
> not recommended. Instead, concentrate efforts on technical controls,
> especially:
>
> - defending against automated guessing attacks by either using account
>   lockout, throttling, or protective monitoring
> - blacklisting the most common password choices

How I made this list:

- went to the OWASP repository of security lists:
  https://github.com/danielmiessler/SecLists

- downloaded `10k_most_common.txt`, `twitter-banned.txt` and
  `500-worst-passwords.txt`

- filtered out any under 8 characters:
  ```
  sed -r '/^.{,7}$/d' passwords-twitter.txt > passwords-combined.txt
  sed -r '/^.{,7}$/d' passwords-500.txt >> passwords-combined.txt
  sed -r '/^.{,7}$/d' passwords.txt >> passwords-combined.txt
  ```

- filtered out any duplicates:
  ```
  cat passwords-combined.txt | awk '!x[$0]++' > passwords-combined-deduped.txt
  ```
This commit is contained in:
Chris Hill-Scott
2016-09-27 11:28:12 +01:00
parent 0c704c246d
commit 136662bd30
5 changed files with 2106 additions and 8 deletions

View File

@@ -284,8 +284,8 @@ def test_should_redirect_after_password_change(app_,
with app_.test_client() as client:
client.login(api_user_active)
data = {
'new_password': '1234567890',
'old_password': '4567676328'}
'new_password': 'the new password',
'old_password': 'the old password'}
response = client.post(
url_for('main.user_profile_password'),
data=data)