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

Автор: | 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. Аноним

    # Ввeсти в поле логина SQL запрос ( DROP TABLE user; SELECT * FROM blog WHERE code LIKE ‘a%’;);
    — не сработает.

  2. Alexey Bulat

    Еще один catch…
    Иногда запись вида alert(‘truba’) может пройти успешно, поэтому предлагаю заэскейпить символы ><.
    После чего скрипт будет таким:
    <script>alert('truba')</script>
    Очень часто проходит и есть шанс поймать багу за хвост…

  3. Alexey Bulat

    Еще для регистрации нового пользователя можно добавить:
    8. использование только ASCII символов в логине – Expected: alert.
    9. регистрация пользователя с логином, содержащим пробелы или состоящим из одних пробелом – Expected: alert.
    10. регистрация пользователя с паролем, содержащим пробелы или состоящим из одних пробелом – Expected: alert.
    11. регистрация пользователя с логином содержащим XSS или SQL injections. – Expected: alert.
    список не полный, но это то, что пришло в голову сходу…

  4. grinder

    Сомнения по поводу пункта 20:
    >Попытаться залогиниться, используя в логине буквы только одного регистра (vasea). Expected: можно.
    Можно ли? Думаю, и логин и пароль обязаны быть case-sensitive.

  5. Alexey Bulat

    Странно, один из моих постов с тест кейсами потерялся 🙂
    пробую еще раз:
    Иногда логин вида alert(123) будет заблокирован системой, в этом случае я предлагаю заэскейпить символы >< и попробовать следующий логин:
    <script>alert(123)</script>

  6. Alexey Bulat

    🙂 интересно 🙂 в предыдущем посте я хотел написать:
    Символ замените на > (“& g t ;” – пробелы убрать)
    Вот… 🙂

  7. Alexey Bulat

    что за хрень 🙂 даже коммент написать не получается :)))
    баги баги баги… баги баги баги…

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

    Вчера боги вордпресс начал обновляться, работать с платформой было невозможно.
    Комментарии получены, спасибо.

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

    Не сработает, если по-тупому вставить as is, или даже если правильно указать названия таблиц?

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

    Омгм… Правильные сомнения, но в платформе, с которой я сейчас работаю, это можно – сделали специально, чтобы имена были уникальными, а то был конфликт между владельцем ника Imperator и владельцем ника ImperatoR 🙂
    Вот пароль должен быть сенситив, несомненно.

  11. Anonim2

    Надо сначала завершить без ошибки выполнение первого селекта выполняемого на сервере– > потом вставить свой –> потом закометировать остаток строки. Пример :
    ‘ or ‘a’ = ‘a’; DROP TABLE user; SELECT * FROM blog WHERE code LIKE ‘a%’; —
    структура запроса зависит от DB.

  12. PitBult

    Ого .. сколько проверок и правил! 🙂 Тут тестить и тестить, а если меняется что-то в коде, по новому нужно тестить.
    Мне кажется, что проще быть уверенным в правильной валидации данных своего фреймворка, нежели тестировать всеми способами.
    Например, в Yii я пишу так:
    public function rules()
    {
    return array(
    // username are required
    array(‘user_login, user_email’, ‘required’),
    // username must be between 6 and 30 characters
    array(‘user_login’, ‘length’, ‘min’=>6, ‘max’=>30),
    array(‘user_email’, ’email’),
    // verifyCode needs to be entered correctly
    array(‘verifyCode’, ‘captcha’, ‘allowEmpty’ => !extension_loaded(‘gd’)),
    );
    }
    Хотя тестирование всегда будет и до идеала его довести очень тяжело.

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

    Ну, я вижу в твоем коде только проверки:
    – что обязательно заполнение двух полей
    – что мин 6 и мак 30 символов в поле логина
    – что в поле user_email должно находиться что-то, похожее только на емайл
    – что ты подозреваешь роботов в каждом юзере 🙂
    Все остальное непокрыто, и лично мне неясно, чего можно ожидать от этих милых, пушистых, но безумно неожиданных юзверей…
    Идеал и не нужен, иначе тестировщики потеряют право отмазываться “Всего не перетестишь!” Нужно из списка выцыганить самое важное “для себя” и проверить.

  14. Alexey Bulat

    В этом то и суть тестирования, что оно идет независимо от тестирования разработчиков…

  15. PitBult

    Ну да, соглашусь! Я еще не подключил правило для допустимых символов в логине. Это будет обязательно, иначе внесут всякую дрянь.
    Кроме этого, нужен фильтр цензурных слов.

  16. Аноним

    Сначала нужно определить поддерживает ли DB драйвер sql multi queries.

  17. Аноним

    а можно ли зарегистрировать пользователя:
    admin
    и пользователя
    аdmin (где а – из русской расскладки)
    ?

  18. Аноним

    есть такие умные разработчики, которые проверяют пользователя в базе с помощью LIKE и не обрабатывают user input, поэтому нужно проверить комбинацию %%%/%%% (знак % повторяется 3 раза, чтобы обойти валидацию на минимальную длину).

  19. Freiman

    Теперь пункт 5 оказывается лишним – дублируется более широким п. 9

  20. Ирина

    Добрый день! Помогите мне пожалуйста. У меня при вводе на латинском видимо поставлен блокирующий режим перевода латиницы на русский алфивит, и пароль тоже. Как только начинаю в латинице набирать логин, он перескакивает на русский, соответственно вход на сайт блокируется.
    что мне сделать чтобы отменить это?

  21. Alexey Bulat

    Ирина, в этом случае есть парочка вариантов обойти проблему, первый простой второй с веселый 🙂
    1. Удалите программу перевода латиницы на русский!
    2. Наберите по 1 символу (написали, скопировали и вставили) в блокноте Ваш логин и потом пароль. а потом просто копипастите его в форму логина 🙂
    Первый вариант мне нравится больше 🙂
    Вот…

  22. Alex

    Отличная статья!!! огромное спасибо, уже применяю на практике некоторые кейсы…
    Не совсем согласен с п. 15-16 – как правило встречал приложения, где пробелы перед после логина – обрезаются и юзер логинится (e.g. gmail.com)
    Алексей, если будет возможность, прокомментируйте плиз. Заранее СПАСИБО!

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

    Цель была такая: собрать любые мелочи, которые могут иметь отношение к тестированию полей ввода, и в частности – логин/пароль.
    Незачем использовать весь этот список “as is”.
    Из него нужно выписать то, что подходит для каждого частного случая.
    Случай с пробелами, которые обрезаются – это хорошо, если обрезаются. У меня были случаи, когда это не обрезалось. Хорошо знать заранее, что и как работает 🙂 Обычно же знаешь, что и как ДОЛЖНО работать, не более.
    К слову, этот список по-разному воспринимается тестировщиками и программистами.
    – Тестировщики смотрят на это внимательно и сурово. Просто список проверок.
    – Программисты смотрят на это с возгласом “Ну ни фига себе, сколько всякого наворотили!”

  24. Alex

    Cool! полностью согласен, спасибо за Ваш ответ и Ваши посты! 🙂

  25. Albert Gareev

    В разделы
    Регистрация нового пользователя, логин существующим пользователем
    Ввод некорректных данных
    Ввести логин <newuser>
    Причина: иногда валидатор вырезает запрещенные символы и проверяет остаток, однако после прохождения проверки передает дальше оригинальную строку.
    ******
    В разделы
    Регистрация нового пользователя, логин существуюшим пользователем, смена пароля
    Ввод некорректных данных
    Создать логин с максимально возможным числом символом
    Попробовать залогиниться
    Попробовать сменить пароль
    Причина: возможно несовпадение максимумов между строками ввода нового пароля, ввода пароля, смены пароля, и в БД.
    Дополнительно: проделать те же шаги, но с количеством символов макс+1
    Дополнительно: проделать те же шаги (за исключением смены пароля) для логина
    Дополнительно: проделать те же шаги для логина и пароля, но (1) с макс. количеством разрешенных символов + пробел (и другие безобидные);(2) с макс. количеством разрешенных символов + 1 запрещенный.
    ******
    В разделы
    Особые случаи
    Ввод некорректных данных
    Если данные передаются в адресной строке браузера в виде “login=bla-bla&password=bla-bla”
    – применить все варианты некорректных данных, включая запрещенные символы, и пограничные значения;
    – передать еше какой-нибудь параметр из существующих, напр. “login=bla-bla&password=bla-bla&state=update”

  26. Юрко

    тогда уже и статью пора переименовывать) давно уже вышла за рамки банального тестирования полей логин/пароль и разлилась по широкому полю функционала)))

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

    У меня есть SEO-доводы, которые отстаивают правильность нынешнего заголовка.

  28. Юрко

    как насчет логина с непечатными символами форматирования текста (перевод строки, табуляция и т.п… )? до логина, после, до и после. в принципе и для регистрации тоже вполне применимо.

  29. Уведомление: Комонные проблемсы с шопинг картсами « QA – грамотно

  30. Евгения

    добрый день, я только начинаю тестить и сразу же попала на ваш доклад про IDE, а потом и сюда.
    вопрос по “17. Ввeсти корректный логин и корректный пароль. Нажать на кнопку “Назад” в браузере. Expected: непонятно – или The page should be expired, или увидеть те же поля. Если второе – ввести в поля снова логин и пароль. Перейти. Залогинен?”
    я должна ввести данные, нажать логин, а потом нажать “Назад”? и то что пользователь два раза логинится это хорошо или все таки не очень?

  31. Евгения

    и вот здесь наверно пароль имелось ввиду вместо логина?
    “Зарегистрировать пользователя с логином petea/iZMaIL. Expected: можно. Попытаться залогиниться, используя в пароле буквы только одного регистра (petea/izmail). Expected: alert. Алерт должен указать на причину?”?

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

    это не хорошо и не плохо – это бывает.
    Плохо или хорошо – зависит от реализации каждой системы в отдельности.
    Иногда все выглядит так, словно юзер повторно логинится. Иногда нет.

  33. Cornel

    “Установить фокус на поле логина. Ввести текст. Нажать кнопку Tab на клавиатуре. Expected: фокус перемещается на поле пароля. Ввести текст. Нажать кнопку Tab на клавиатуре. Expected: фокус перемещается на галочку “remember me”. Нажать кнопку Space на клавиатуре. Expected: появилась галочка. Нажать кнопку Tab на клавиатуре. Expected: фокус перемещается на кнопку Login. Нажать кнопку Enter на клавиатуре. Expected: процесс пошёл. ”
    А что если в “Crome” все работает а в “FireFox” нет. Это проблема браузера или кода.
    Спасибо.

  34. olividuk

    Полезная стаття – люблю когда всё собранно в одном месте и структурированно. Раздел «Особые случаи» – еще бы расширить и описать поподробней. Готов автору поставить вкусную выпивку 🙂
    ЗАМЕЧАНИЕ 0.
    Рекомендую потратить несколько минут. Забросить текст в Word и проверить хотя бы по минимуму орфографию. Как ни как если текст раскрутится, то его могут читать пол НСГ (из числа заинтересованных) .
    ЗАМЕЧАНИЕ 1. К разделу «Регистрация нового пользователя», п.8 – п.9.
    8. регистрация пользователя с логином, содержащим пробелы или состоящим из одних пробелом – Expected: alert.
    9. регистрация пользователя с паролем, содержащим пробелы или состоящим из одних пробелом – Expected: alert.
    – 2 пункта идентичны
    – «пробелом» заменить на «пробелов» (2 замены)
    ЗАМЕЧАНИЕ 2. К разделу «Регистрация нового пользователя», п.11.
    русской расскладки
    – «расСкладки» заменить на «раскладки»
    ЗАМЕЧАНИЕ 3. К разделу «Регистрация нового пользователя», п.13.
    Логин под существуюшим
    – «существуюШим» заменить на «существуюЩим»
    ЗАМЕЧАНИЕ 4. К разделу «Особые случаи», п.4.2.
    передать еше какой-нибудь
    – «еше» заменить на «еЩе»

  35. Mar

    Спасибо за статью. Есть ли такого рода статьи для других функциональностей?

  36. Igor

    Объясните пожалуйста почему Expected: alert на
    Зарегистрировать нового пользователя с логином new@user. ?
    Чем мешает @ в логине?

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

    Хм.
    Не объясню. Не помню, какое было соображение, когда это писалось.

  38. Natallya

    Здравствуйте, подскажите техническую деталь – какой пароль будут корректным для этих кейсов?
    “6. Ввeсти некорректный логин, но корректный пароль. Expected: alert.
    7. Ввeсти некорректный логин и некорректный пароль. Expected: alert.”
    Разве некорректность логина не подразумевает, что – все, логина нет, пароль уже неважен? Спасибо!

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

    Тут подразумевается очень редкий случай, когда проверка проводится только по одному из полей.
    Конечно, казалось бы…

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

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