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

时间:2010-03-28 03:05:03

标签: php security e-commerce credit-card

如何在PHP中的页面之间安全地传递信用卡信息?我正在构建一个电子商务应用程序,我希望让用户像这样完成结账:

输入信息 - >评论 - >完成订单

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

任何帮助将不胜感激!

6 个答案:

答案 0 :(得分:10)

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

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

您可能只关心交易是否获得批准或拒绝。谁在乎这个号码是什么?

答案 1 :(得分:8)

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

所以程序流程就像这样:

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

    1. 您可以节省存储信用信息时所需的额外PCI合规性的开销和成本。
    2. 此方法保持在SSL协议的安全范围内。这意味着,加密的信用卡信息必须在任何情况下提交给您的服务器 - 这种方法继续完全依赖于SSL的功效,而不会引入持久信用卡数据的复杂性。
    3. 最后一点提出了另一个问题 - 通过一个评论页面,您将加密的信用卡数据通过网络传输的次数加倍。使用此方法最少有4个传输:客户端到服务器,服务器到客户端,客户端到服务器(再次),然后服务器到网关。没有审查,最少有2个传输:客户端到服务器,服务器到网关。评论页面的便利是否值得额外传输的风险?这是您作为Web开发人员(以及您的客户)的决定。

答案 2 :(得分:1)

首先,您应该使用HTTPS协议来确保连接已加密。

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

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

 https://example.com/order?orderID=akjgflkhaslasdfkjhalsdjkljahs

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

答案 3 :(得分:1)

另一种方法是使用Authorize.net's Customer Information Manager等付款资料服务(还有其他服务)。您可以通过API在配置文件中存储付款信息,然后在实际为卡充电时使用配置文件ID。这样,您就永远不会将数据存储在服务器上。

答案 4 :(得分:0)

不是我的专业领域,但我认为你想将它存储在一个会话中,但也使用“同步令牌”(或者这些天孩子们正在调用的任何东西)来帮助避免CSRF攻击。

当然,您希望使用https(正确),避免URL和隐藏字段中的敏感数据,避免在任何响应中放置非常敏感的信息等等。

答案 5 :(得分:0)

我想我必须同意。存储信用卡号码的风险太大,后果可能很大。

理想的方法是将信息传递给第三方处理器,并使用返回的结果来塑造脚本逻辑。

if (transaction){
     // code goes here
}
else{
     // code goes here
}

希望你明白......:)