繁体   English   中英

通过加密到数据库保存信用卡信息

[英]save credit card info by encrypting to database

我的用例是,用户应该能够将信用卡信息(如信用卡号、卡上姓名、到期日和卡类型)保存到数据库中。 信用卡信息非常关键。 它需要加密。 我知道最好使用条带将这些信息保存到他们的服务器,但目前我不确定我将使用什么平台。 出于临时目的,如果我必须保存这些详细信息,我应该怎么做? 我还需要将这些详细信息发送到前端(反应应用程序) ,这样我就可以向用户展示他们有以下可以用来付款的卡片。 我不会显示信用卡号,只显示信用卡,但要付款,我需要从服务器取回这些信息,这样我就可以在付款时自动填写这些详细信息。

这是我尝试的方法,但对于加密,我使用了 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
        }
      },

注意:我没有使用任何支付处理器。 我只是mocking的过程。 由于我不确定,我将使用什么支付平台。 Stripe 支持将卡片详细信息保存到其服务器并获取已保存卡片的列表并稍后收费但不确定我稍后选择的平台是否支持此功能。 所以我现在只想通过将这些详细信息保存在我的数据库中来模仿,并让这些详细信息尽可能安全地自动填充。

除非您的应用程序符合 PCI 标准,否则您不应在任何情况下接受任何真实的信用卡号码。

您可以接受编造的信用卡号码,例如,您可以开发您的前端。 在这种情况下,您不需要为它们提供任何特殊安全性。

如果您在开发过程中出于某种原因必须接受真实的信用卡号,则应按照其所有安全指南与合法的支付处理器之一集成。 然后,如果您希望切换支付处理器,您可以在以后进行。

要在 MongoDB 中存储任何类型的敏感信息,例如条带令牌,您可以使用客户端加密

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM