Меню

Что такое CVV: код на карте и почему его нельзя хранить

CVV — короткий код на карте, который подтверждает, что пластик у покупателя. Разбираем, чем он отличается от других кодов и почему его запрещено сохранять.

Опубликовано

  • безопасность платежей
  • тестовые данные

Поле для короткого кода рядом с полем ввода номера карты вызывает больше всего вопросов у покупателей: где его искать, зачем он нужен и почему иногда его требуют, а иногда нет. Ответ начинается с определения. CVV — это код проверки карты, несколько цифр, напечатанных на самом пластике, и его единственная задача — доказать, что человек держит карту в руках, а не просто знает её номер. Ниже — где искать этот код, чем он отличается от похожих обозначений, почему его нельзя хранить и что из этого следует для формы оплаты.

Зачем вообще нужен отдельный код

Номер карты — плохой секрет. Он напечатан на пластике крупными цифрами, его диктуют по телефону, вводят на десятках сайтов и рассылают в переписке. Если бы для оплаты хватало одного номера, украденной фотографии карты было бы достаточно, чтобы списать деньги.

Код проверки добавляет к номеру второй фактор — физическое присутствие карты. Запомнить его со слов сложнее, а найти в утечке баз данных он не может, потому что правило отрасли запрещает сохранять его после авторизации. Это не полноценная защита, но заметный барьер: без кода часть операций просто не пройдёт.

Где его искать и сколько в нём цифр

Расположение зависит от платёжной системы, и это самая частая причина, по которой покупатель не находит поле.

  • Большинство карт. Три цифры на обратной стороне, справа от полосы для подписи. Обычно они идут последними в короткой строке цифр.
  • American Express. Четыре цифры, напечатанные на лицевой стороне, справа над номером карты.
  • Виртуальные карты. Код показывается в приложении банка или на отдельной странице реквизитов; на самом пластике его может не быть вовсе.

Иногда покупатель путает код с другими цифрами на карте. Помогает простое правило: на карте есть номер, есть срок действия и есть код проверки. Всё остальное — служебные надписи, которые никуда вводить не нужно.

CVV, CVC, CVV2 — это одно и то же?

Названий много, и путаница возникает из-за истории и разных платёжных систем. По смыслу речь об одном и том же коротком коде, который печатается на карте и не хранится в базе продавца.

Различия между обозначениями касаются того, идёт ли речь о коде на полосе или о коде, видимом глазами. Для покупателя это не важно: форма всегда просит тот код, который напечатан на карте и виден без специального оборудования. Если на обратной стороне под полосой напечатано три цифры — это он, а не что-то другое.

Можно ли хранить код после оплаты

Нельзя, и это не рекомендация, а требование платёжной индустрии. Данные аутентификации — код проверки и содержимое магнитной полосы — запрещено сохранять после того, как операция авторизована. Отдельно запрещено писать их в логи, в отчёты и в системы аналитики.

Причина проста: смысл кода в том, что он нигде не хранится. Если продавец начнёт складывать коды в базу, любая утечка превратится в готовый набор реквизитов, пригодных для мошенничества, — и весь смысл второго фактора исчезнет. Правило существует именно для того, чтобы таких наборов не появлялось.

На практике это означает, что поле для кода на сайте живёт ровно один запрос. Его вводят, отправляют поставщику платежей и забывают: в базе не остаётся ни самого кода, ни его зашифрованной копии.

Что подставлять в форму при тестировании

Тестировать поле для кода нужно всегда — иначе есть риск, что форма отправит на сервер пустую строку или сохранит её там, где не должна. Для проверки подходит любой короткий набор цифр: настоящий смысл поля в том, что оно принимает цифры и сразу отдаёт их дальше.

Номера для таких проверок удобно брать в генераторе: он выдаёт структурно корректные значения, которые никогда не выпускались ни одним банком и не принадлежат никому. Эти данные годятся только для тестирования интерфейсов и интеграций — провести по ним реальный платёж невозможно.

Почему код иногда не спрашивают?

Покупатель, привыкший вводить три цифры на каждом сайте, иногда удивляется, что где-то их не просят. Объяснение простое: код подтверждает присутствие карты, а есть операции, которые выполняются без участия держателя.

При повторном списании по подписке или при списании по сохранённому согласию карта физически никому не предъявляется, поэтому спрашивать код бессмысленно — его всё равно никто не введёт. Похожая ситуация с покупкой в один клик: покупатель уже подтверждал своё согласие раньше, и повторное подтверждение становится лишним шагом.

Но есть и обратная сторона, о которой стоит помнить: отсутствие запроса кода — это решение, которое принимается по правилам платёжной системы и с учётом оценки риска, а не произвольный выбор разработчика. Нельзя «на всякий случай» перестать спрашивать код там, где он обязателен: операция может быть отклонена, а спор по ней решён не в пользу продавца. Если вы сомневаетесь, обязателен ли код в вашем сценарии, это нужно уточнять в документации поставщика платежей, а не угадывать.

Что важно разработчику

Требование не хранить код проверки нужно перевести в конкретные технические решения, иначе оно останется на бумаге. Первое: значение поля не должно попадать в базу ни в открытом виде, ни в шифрованном — независимо от того, как хранятся остальные данные карты. Второе: его не должно быть в логах приложения, в трассировках запросов, в телах событий и в очередях. Вспомните об этом, когда включаете подробное логирование для отладки: именно на этом этапе коды чаще всего утекают в файлы.

Третье решение — маршрутизация. Если вы работаете через поставщика платежей, ввод должен уходить напрямую к нему, минуя ваш бэкенд, чтобы значение просто не проходило через вашу инфраструктуру и не попадало в область действия строгих требований. Четвёртое — очистка. После ответа поставщика поле нужно немедленно обнулить, а не оставлять в состоянии сессии до следующего шага. Пятое — валидация формы. Проверяйте, что в поле только цифры и что их не меньше трёх, но не привязывайтесь жёстко к трём цифрам: у одной из платёжных систем их четыре, и такая форма откажет её держателям.

Отдельно стоит проверить, не попадает ли код в отчёты об ошибках. Автоматический сборщик исключений любит прикладывать к письму полный набор полей запроса — и тогда код оказывается в почтовом ящике разработчика.

Что делать дальше

Пройдите по своей форме и найдите все места, где значение поля может быть сохранено: база, логи, события, письма об ошибках, аналитика. Если хотя бы одно место осталось — это дефект, который нужно исправить до запуска. Затем посмотрите, как форма ведёт себя с четырёхзначным кодом, и сверьте остальные сценарии с чек-листом платёжной формы и требованиями к тестовым данным. Общая логика проверки карты перед оплатой разобрана в материале про валидацию номера.

Читать дальше

Статьи: Генератор фальшивых номеров банковских карт