不使用表单/POST 将信息传递给支付提供商的安全替代方法

问题描述

不久前,当恐龙在地球上漫游时,我为我的网站拼凑了一系列付款处理页面

您可以在这个博物馆中看到这种史前独创性的奇迹 https://www.lawnbagsigns.com/

它的工作原理是它是一系列三页,它们通过使用 POST 相互传递信息。变量也存储在 SESSION 中,因为为什么不呢。我喜欢冗余。

这样做是因为原始支付处理就是这样完成的,而且我目前使用的支付处理器(Bambora/Beanstream)有一个 API,它要求我向他们的网站提交一个包含所有相关信息的 POST 表单,包括密码等。

问题在于,当您“检查源代码”时,您可以看到所有这些信息。我从来没有真正在意过,因为支付密码与我访问他们终端所需的登录信息不同。我从不担心它,因为有人会用它做什么?寄钱给我?太好了,继续做吧。

问题是,实际上人们确实窃取了这些信息并使用它...向我汇款?大问题,对吧?好吧,事实证明,他们正在做的是“梳理”。对于那些不知道的人来说,“刷卡”是指一些黑客窃取一些信用卡号,然后使用像我这样的糟糕的支付处理站点来检查这些卡是否有效/是否有钱。我不能保留他们寄给我的任何钱,我只能对千美元的交易账单和“每小时发送的电子邮件太多”的消息提出异议,因为每笔交易都会通过电子邮件发送收据。每次他们这样做时,他们都会尝试大约一千次。每小时。

我尝试了几种方法来阻止它们。例如,设置最低付款金额,设置验证码。无奈之下,我会从服务器中删除 .PHP 文件,但它们仍然每小时发出数千个处理请求。我认为他们在某处有自己的网站,运行脚本,通过卡号并使用他们从“查看源代码页面提取的信息代表我发送交易请求。这意味着我必须找到某种方式将信息传递给他们的 API,而不会在网站上公开我的付款凭证(是的,我将为其更改密码,显然)

服务提供商有一个新的 API,其中包含通过 Javascript 执行的新文档,可以解决这些问题。但是,这需要重新编写这部分,并且我有一个新网站正在开发中。我只需要在此期间有效的东西,不会出现此类问题。

TLDR 是否有一种简单的方法可以将信息发送到另一个网站进行处理,而无需通过表单/POST 将其公开给所有人查看?

解决方法

是否有一种简单的方法可以将信息发送到另一个网站进行处理,而无需通过表单/POST 将其公开给所有人查看

PHP 应该是这样工作的。您首先做后端工作 - 例如处理表单或与外部服务(支付网关)通信,然后生成 HTML 模板或重定向到 HTML 页面。

我会用一个基本的例子来展示它:

  1. HTML 页面包含一个表单
  2. 并将数据提交到 PHP 脚本
  3. PHP 将接收到的表单数据发送到外部服务(例如支付门)
  4. 并重定向到感谢 HTML 页面

form.html

<form action="/submit.php" method="post">
    <input type="text" name="firstname">
    <input type="submit">
</form>

提交.php

<?php
$firstname = $POST['firstname'] ?? null;

/*
 * some external services publish their SDK
 * or you can call their API using the PHP CURL functions
 */
$paymentGateSdk->sendFirstName($firstName);

/*
 * after you've sent it to the payment gate
 * redirect the user to the thank you page
 */
header('Location: /thank-you.html');

谢谢.html

<p>Thank you for shopping with us</p>

还有 MVC 框架,例如 Symfony 或 Laravel,可帮助您将代码组织成有意义的层(模型、视图、控制器——正如缩写所示),但这本身就是一个相当广泛的主题,所以我会留在这里让其他人回答。