сохранить информацию о кредитной карте, зашифровав ее в базе данных - PullRequest
0 голосов
/ 17 июня 2020

В моем случае пользователь должен иметь возможность сохранять в базе данных информацию о кредитной карте, такую ​​как номер кредитной карты, имя на карте, срок действия и тип карты. Информация о кредитной карте очень важна. Требуется шифрование. Я знаю, что лучше использовать полосу для сохранения этой информации на их сервере, но в настоящее время я не уверен, какую платформу я буду использовать. Для временной цели, если мне нужно сохранить эти данные, как мне это сделать? Мне нужны эти данные для внешнего интерфейса (приложения для реагирования) , чтобы я мог показать пользователю, что у него есть следующие карты, с которых они могут совершать платеж. Я не буду показывать номер кредитной карты, только карту, но для совершения платежа мне нужна эта информация, чтобы получить ее с сервера, чтобы я мог автоматически заполнить эти данные при совершении платежа.

Вот как я пытался, но для шифрования я использовал bcrypt. Поскольку bcrypt - это односторонний алгоритм, я не смог декодировать во внешнем интерфейсе для автозаполнения деталей в библиотеке обработчика платежей.

const hashPassword = async (password) => {
  const saltRounds = 10;
  return await bcrypt.hash(password, saltRounds);
}


saveCard: combineResolvers(
      async (parent, { input: { userId, cardData } }, { req }) => {
        try {
          const existingUser = await req.db
            .collection('User')
            .findOne({
              _id: userId,
            });
          if (!existingUser) {
            // raise user not found error
          }
          const creditCardObj = await validateCreateCreditCardSchema(
            req,
            cardData,
          );
          creditCardObj.creditCardNumber = await hashPassword(
            cardData.creditCardNumber,
          ); // uses salted hash
          creditCardObj.userId = userId;
          const creditCardRes = await req.db
            .collection('CreditCard')
            .insertOne(creditCardObj);
          if (creditCardRes.result.n > 0) {
            // return success response
          } else {
          //  error occured message
          }
        } catch (err) {
          // internal server error
        }
      },

Примечание. Я не использую никакой процессор платежей. Я просто издеваюсь над процессом. Поскольку я не уверен, какую платежную платформу я буду использовать. Stripe поддерживает функцию сохранения данных карты на свой сервер и получения списка сохраненных карт и оплаты позже, но не уверен, что платформа, которую я выберу позже, будет поддерживать это. поэтому я просто хочу имитировать пока что, сохранив эти данные в моей базе данных и заставив их автозаполнить как можно безопаснее.

1 Ответ

0 голосов
/ 17 июня 2020

Если ваше приложение не соответствует стандарту PCI , вы должны НЕ принимать какие-либо реальные номера кредитных карт В ЛЮБОЙ СИТУАЦИИ .

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

Если вы должны принимать реальные номера кредитных карт во время разработки по какой-либо причине, вам следует выполнить интеграцию с one законных платежных систем, соблюдающих все их инструкции по безопасности. Затем, если вы используете sh для переключения платежных систем, вы можете сделать это в будущем.

Для хранения любой конфиденциальной информации, такой как токены полосы, в MongoDB, вы можете использовать шифрование на стороне клиента .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...