如何在PHP页面之间安全地传递信用卡信息

Ale*_*lex 7 php security credit-card e-commerce

如何在PHP页面之间安全地传递信用卡信息?我正在构建一个电子商务应用程序,我想让用户像这样通过结帐:

输入信息 - >查看 - >完成订单

问题是我不确定如何安全地从用户输入信用信息到我处理信用信息时(在Finalize Order步骤).我听说使用会话是不安全的,即使加密也是如此.

任何帮助,将不胜感激!

Rim*_*ian 10

我不会把它存放在任何地方.这太冒了风险,可能不符合道德规范.

通过在https上发布表单向支付网关发送请求,并仅存储交易结果.

您可能只关心交易是否被批准或拒绝.谁在乎这个数字是多少?

  • 实际上,在您输入信息后,许多网站(包括亚马逊,新网)都有一个评论/确认页面,以确保您输入正确的运费/结算信息 (2认同)

lee*_*ers 8

不要将信用卡信息存储在会话中,不要将其存储到数据库中,也不要将其存储到文件中.相反,将cc信息写回隐藏的html输入中的评论页面.

所以程序流程会像这样工作:

  1. 用户通过html表单将付款和结算信息发布到服务器.
  2. 服务器验证此信息的格式是否正确(即信用卡具有适当的位数,输入的帐单地址等)
  3. 验证后,服务器将所有作为隐藏表单输入字段提交的信息写回.这包括帐单邮寄地址,送货地址和信用卡信息.
  4. 审阅页面上的表单(带有隐藏的输入字段)有一个标记为"完成订单"/"完成订单"的按钮.此评论表单发布到最终订单脚本.
  5. finalize脚本将结算/发货信息存储在您的数据库中,并将信用卡信息提交给您的支付网关.

这种方法的优点是双重的:

  1. 您可以节省存储信用信息时所需的额外PCI合规性的开销和成本.
  2. 此方法保持在SSL协议的安全范围内.这意味着,加密的信用卡信息必须在任何情况下提交给您的服务器 - 这种方法继续完全依赖于SSL的功效,而不会引入持久信用卡数据的复杂性.

最后一点提出了另一个问题 - 通过一个评论页面,您将加密的信用卡数据通过网络传输的次数加倍.使用此方法最少有4个传输:客户端到服务器,服务器到客户端,客户端到服务器(再次),然后服务器到网关.没有审查,最少有2个传输:客户端到服务器,服务器到网关.评论页面的便利是否值得额外传输的风险?这是您作为Web开发人员(和您的客户)的决定.

  • 使用此方法,您不会将cc信息存储在服务器上的任何位置,因此您将能够依靠SSL加密将cc数据传输到服务器或从服务器传输cc数据. (2认同)

Tyl*_*ter 1

好吧,首先您应该使用 HTTPS 协议来确保连接是加密的。

之后,您可以将数据存储在$_SESSION超级全局中。数据存储在您的服务器上,因此相对安全。

您可以使用类似的技术,将信息插入订单数据库,其中密钥是 GUID 或其他相当随机且唯一的东西。然后,当该人去修改/查看他们的订单时,您应该将订单 ID 存储在 URL 的 GET 部分中(或者如果您偏执,则存储在 cookie/会话变量中):

 https://example.com/order?orderID=akjgflkhaslasdfkjhalsdjkljahs
Run Code Online (Sandbox Code Playgroud)

为了提供额外的安全性,您还可以在订单表中存储 IP 地址,并确保 IP 和订单 ID 匹配。

  • 这违反了 PCI-DSS,因为 $_SESSION 将以纯文本形式将数据写入硬盘。 (9认同)
  • @Alex 从服务器请求确认页面。你还要把它存放在哪里?客户端? (2认同)