Тестируем поля логин/пароль

Автор: | 09.09.2009

Как и все собравшиеся в этом мониторе, мне приходится тестировать иногда проклятые поля ввода логина и пароля. И еще поля регистрации нового юзверя. По ходу дела и после поисков по интернетам собрался отдельный файлик с перечнем тематических тестов (еще будет дополняться и всячески обновляться). Полезен и в ратнейшем труде программистов.

Повсюду под предложением “Expected: alert” подразумевается, что ответ должен быть отрицательным, но система должна как-то сигнализировать юзеру о причине проблемы.

Регистрация нового пользователя

  1. Зарегистрировать нового пользователя с логином new_user. Expected: можно.
  2. Зарегистрировать нового пользователя с логином new_user_test. Expected: можно.
  3. Зарегистрировать нового пользователя с логином new-user. Expected: можно.
  4. Зарегистрировать нового пользователя с логином new1234user. Expected: можно.
  5. Зарегистрировать нового пользователя с логином new@user. Expected: alert.
  6. Зарегистрировать нового пользователя с логином newuser и паролем newuser (полное совпадение). Expected: alert.
  7. использование только ASCII символов в логине – Expected: alert.
  8. регистрация пользователя с логином, содержащим пробелы или состоящим из одних пробелом – Expected: alert.
  9. регистрация пользователя с паролем, содержащим пробелы или состоящим из одних пробелом – Expected: alert.
  10. регистрация пользователя с логином содержащим XSS или SQL injections. – Expected: alert.
  11. а можно ли зарегистрировать пользователя “admin”, и пользователя “аdmin” (где а – из русской расскладки)?
  12. В некоторых случаях разработчики проверяют пользователя в базе с помощью LIKE, и не обрабатывают user input. Поэтому нужно проверить комбинацию %%%/%%% (знак % повторяется 3 раза, чтобы обойти валидацию на минимальную длину).
  13. Логин под существуюшим пользователем – смена пароля:
    1. Создать аккаунт с максимально возможным числом символом в логине
      1. Попробовать залогиниться
      2. Попробовать сменить пароль
      3. Причина: возможно несовпадение максимумов между строками ввода нового пароля, ввода пароля, смены пароля, и в БД.
        1. Дополнительно: проделать те же шаги, но с количеством символов макс+1
        2. Дополнительно: проделать те же шаги, но
          1. с макс. количеством разрешенных символов + пробел (и другие безобидные);
          2. с макс. количеством разрешенных символов + 1 запрещенный.
    2. Создать аккаунт с максимально возможным числом символом в пароле
      1. Попробовать залогиниться
      2. Попробовать сменить пароль (а может – и сам логин?)
      3. Причина та же: возможно несовпадение максимумов между строками ввода нового пароля, ввода пароля, смены пароля, и в БД.

Ввод некорректных данных

  1. Ввeсти корректный логин и корректный пароль. Expected: успешно залогинен. Разлогиниться. Почистить кэш и куки (открыть/закрыть браузер?).
  2. Оставить оба поля пустыми. Нажать на Login. Expected: alert.
  3. Оставить пустое поле login. Нажать на Login. Expected: alert.
  4. Оставить пустое поле password. Нажать на Login. Expected: alert.
  5. Ввeсти корректный логин и некорректный пароль. Expected: alert.
  6. Ввeсти некорректный логин, но корректный пароль. Expected: alert.
  7. Ввeсти некорректный логин и некорректный пароль. Expected: alert.
  8. В поле логина ввeсти корректный пароль, а в поле пароля ввести корректный логин. Expected: alert.
  9. Ввeсти логин <script>alert(123)</script> и корректный пароль. Expected: alert.
  10. Ввeсти в поле логина SQL запрос (‘ or ‘a’ = ‘a’; DROP TABLE user; SELECT * FROM blog WHERE code LIKE ‘a%’;)   — структура запроса зависит от DB.
  11. Ввeсти в поле логина скрипт (<script>alert(“Hello, world!”)</alert>, <script>document.getElementByID(“…”).disabled=true</script>)
  12. Ввeсти в поле логина html-теги (<form action=”http://live.hh.ru”><input type=”submit”></form>)
  13. Ввeсти в поле логина сложную последовательность символов вроде “♣☺♂” , “”‘~!@#$%^&*()?>,./\<][ /*<!–“”, “${code}”;–>
  14. Ввeсти в поле логина текст состоящий из одних пробелов;
  15. Ввeсти в поле логина правильный логин, начинающийся с нескольких пробелов, и правильный пароль. Expected: alert.
  16. Ввeсти в поле логина правильный логин, после которого следуют нескольких пробелов, и правильный пароль. Expected: alert.
  17. Ввeсти корректный логин и корректный пароль. Нажать на кнопку “Назад” в браузере. Expected: непонятно – или The page should be expired, или увидеть те же поля. Если второе – ввести в поля снова логин и пароль. Перейти. Залогинен?
  18. Ввeсти корректный логин. Указать пароль с использованием букв РАЗНОГО регистра.
  19. Ввeсти логин с использованием букв РАЗНОГО регистра. Указать корректный пароль.
  20. Зарегистрировать пользователя с логином VasEA. Expected: можно. Попытаться залогиниться, используя в логине буквы только одного регистра (vasea). Expected: можно.
  21. Зарегистрировать пользователя с логином petea/iZMaIL. Expected: можно. Попытаться залогиниться, используя в пароле буквы только одного регистра (petea/izmail). Expected: alert. Алерт должен указать на причину?
  22. Проверить ограничение на длину логина и пароля при регистрации? Ввести  qqweqweqweqweqweqweqweqweqweqweqweqweqweqwe / qqweqweqweqweqweqweqweqweqweqweqweqweqweqwe
  23. Ввести логин/пароль Aa!@#$%^&*()-_+=`~/\,.?><|b / PaSSword!@#$%^&*()-_+=`~/\,.?><| Есть ли ограничения на допустимые символы?
  24. Ввести логин/пароль Иван/Болван Возможно ли создание имени/пароль с например кириллицей, если да – то как потом эта форма отрабатывает?
  25. Ввeсти логин ksjdksbdshdoueywfgjwevflwjeyfvowyecsydcvsldc (несуществующий в базе), оставить поле пароля пустым. Expected: such user doesn’t exist.
  26. Открыть первый бразуер. Залогиниться валидным юзером. Открыть второй браузер. Залогиниться тем же самым валидным юзером. Expected: можно. Разлогиниться в первом браузере. Expected: можно. Перейти во второй браузер. Сделать что-нибудь, что может сделать только залогиненный юзер. Expected: можно.
  27. Открыть браузер. Ввести в поля валидные данные. Нажать на кнопку Login. Отключить интернет. Получить “страница недоступна”. Подключить интернет обратно. Зайти на сайт. Expected: не залогинен.
  28. Блокируется ли акаунт/IP того, кто введет n-количество раз не правильный пароль?
  29. Установить фокус на поле логина. Ввести текст. Нажать кнопку Tab на клавиатуре. Expected: фокус перемещается на поле пароля. Ввести текст. Нажать кнопку Tab на клавиатуре. Expected: фокус перемещается на галочку “remember me”. Нажать кнопку Space на клавиатуре. Expected: появилась галочка. Нажать кнопку Tab на клавиатуре. Expected: фокус перемещается на кнопку Login. Нажать кнопку Enter на клавиатуре. Expected: процесс пошёл.
  30. User should be a registered user with his/her account expired.    Clicks on the Login button.
  31. A message should appear stating ‘Your account has been expired’.
  32. Проверка на ‘Remember me on this computer’. Заполнить поля валидными данными. Чекнуть галочку Remember me. Залогиниться. Закрыть браузер. Открыть бразуер. Открыть страницу сайта. Expected: логин для входа не требуется.
  33. Ввести логин существующего пользователя, обрамив его уголками: <userlogin>. Причина: иногда валидатор вырезает запрещенные символы и проверяет остаток, однако после прохождения проверки передает дальше оригинальную строку.

Смена/удаление логинов

  1. В базе или настройках сайта указать, что срок годности определенного логина истек. Залогиниться под этим логином. Expected: Alert.
  2. Залогиниться под корректными логином/паролем. Сменить пароль. Залогиниться под новым паролем. Expected: пароль сменен, можно зайти.
  3. Смена пароля и заход под старым
    1. запомнить пароль
    2. войти в систему
    3. поменять пароль
    4. разлогиниться
    5. залогиниться обратно со старым паролем. Expected: не пускает.
  4. Залогиниться под корректными логином/паролем. Переименовать аккаунт. Перегрузить браузер. Залогиниться под старыми логином/паролем. Expected: не пускает. Залогиниться под новым логином/паролем. Expected: пускает.
  5. Залогиниться под корректными логином/паролем. Удалить аккаунт. Перегрузить браузер. Залогиниться под старыми логином/паролем. Expected: не пускает.

Особые случаи

  1. Ввeсти корректный логин и корректный пароль. Скопировать полученный url и вставить его в другой браузер. Expected: It should not display the user’s welcome page.
  2. Подумать об обработке операции “вставить”, т.е. рассмотреть различные способы ввода данных.
  3. Как формируется запрос к серверу с данной формы (get/post)? Как передается пароль – в виде хэша или плэйн-текстом в теле ПОСТа?
  4. Если данные передаются в адресной строке браузера в виде «login=bla-bla&password=bla-bla»
    1. – применить все варианты некорректных данных, включая запрещенные символы, и пограничные значения;
    2. – передать ещё какой-нибудь параметр из существующих, напр. «login=bla-bla&password=bla-bla&state=update»

Тестируем поля логин/пароль: 56 комментариев

  1. ledi__akaciya

    Можно еще добавить невозможность cut and copy пароль

  2. Vladimir

    Возможно тут опечатка: “Создать аккаунт с максимально возможным числом символом в [u]логине[/u]” и вместо “логине” должно быть “пароле”, исходя из контекста: “Попробовать залогиниться
    Попробовать сменить пароль
    Причина: возможно несовпадение максимумов между строками ввода нового пароля, ввода пароля, смены пароля, и в БД.” или я ошибаюсь?

  3. Алексей Лупан

    Не помню. Это ж сто лет назад было писано 🙂
    За рассуждение возьмите лайк.

  4. Василий

    только надо указать каких именно символов
    0–31 Коды управляющих символов [возвраты каретки, сигнал и прочее]
    65-90 строчные латинские символы [ABCD и.т.д.]
    а то создается впечатление что Login123 у Вас будет не правильный, хотя наверняка имелось ввиду, что надо только чтобы у вас были НЕ допустимы отличные от A-Z, a-z, 0-9, -,_
    P.S. Подвох в слове символ вероятно, буквы и цифры тоже символы обозначающие что-то)

  5. Anya Soboleva

    Expected: such user doesn’t exist. – Не правильно с точки зрения безопасности разделять правильность пароля и имейла. По крайней мере согласно OWASP система не должна уведомлять о том, что такого пользователя не существует

  6. Alex

    эта сильна!

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.