如何传输数据从一个站点到另一个没有MySQL在PHP


How to transfer data from one site to another without MySQL in PHP?

我有两个站点,站点A和站点b,都是简单的PHP站点,没有MySQL。它们在不同的服务器上。

场景:

  • 在站点A上发出用户名/密码请求。站点A应该通过电子邮件将此用户名/密码发送到admin的电子邮件,以显示已发出创建用户的请求。

  • 在站点A上创建用户名/密码的请求将发送到站点B,并且应该在站点B上创建用户名/密码。

  • 用户可在接下来的24小时内通过此信息登录B站点。

在Site B上,已经有一个系统使用存储在数组中的用户名/密码登录用户。

我问题:

基本上一切都清楚了,除了两件事。

  • 我如何有效地从站点A和站点B发送(让我们说<form>变量username/pwd) ?
  • 我通过某种方式在站点B中收到username/pwd后,我可以最有效地存储这些信息的方法是什么?申请吗?或者其他方式,这样我可以使用这些信息登录B站点的用户?

这是一个基本的参考:http://us2.php.net/manual/en/ref.curl.php。您需要了解PHP的cURL函数—这些函数的设计目的是通过网络组装和发送请求。如果您正在传递敏感信息(用户名和密码),那么这些请求确实需要通过https或其他安全协议进行。如果你将用户名和密码存储在一个数组中,那么你将无法动态创建用户。

因此,您需要切换站点B以使用数据库来存储用户信息。有几种不同的API设置用于在互联网上传输数据。RESTful api可能是我所知道的最容易实现的api。总的来说,这是一个相当大的项目,特别是如果你的经验有限的话。链接中有一些关于如何使用curl的基本示例。你并不一定要使用正式的API,但如果其他人在某个时候会与它通信,那就很好了。

总而言之:PHP能够像浏览器一样向其他网站发出请求。它可以通过curl函数(和其他函数)来实现这一点——像其他请求一样,您可以访问接收脚本中的$_POST和$_GET变量中的信息。有时信息与GET请求一起传输,但以PHP默认无法识别的方式作为URL的一部分传输。在这种情况下,您需要使用$_SERVER['REQUEST_URI']变量手动解析信息。

整个设置真的没有什么特别的——使用GET,你发送的数据是url的一部分。使用POST,您将它与请求一起发送(URL是请求的一部分,但POST数据不是"嘈杂",因为它不存储在您的网站历史记录中,通常也不存储在服务器日志中)。在内部,整个过程是通过头文件的传输来完成的。如果您不熟悉,您应该了解它们以及HTTP的底层机制是如何工作的。这和你每次访问一个网站时你的浏览器所经历的过程是一样的——但是你的浏览器对你隐藏了细节。

注意:我不是试图在这里解释一个实现。我对这个问题的解释是,这是一个非常广泛的问题。因此,我试图给你们一个概述,这类事情是如何工作的。https将在两个服务器之间建立一个安全的通信通道,但不会验证站点a的身份,因此需要某种安全的身份验证机制。类似地,对于任何能够登录用户的站点,都需要某种安全身份验证。我建议你研究一下web认证和http基础知识。

我好像记得以前回答过一个类似的问题。因为没有数据库,所以略有不同,但原理大致相同:您需要一个单点登录(SSO)系统。

你可以自己构建一个:每个站点都有一个用于散列和/或加密的共享秘密。假设一个用户成功登录到站点a,然后他们做了一些事情,导致站点B为他们生成用户名/密码,因此站点B需要一种方法来区分真实请求和欺诈请求。

您可以在站点a上生成一个散列:

hash = hash_func(shared_secret + timestamp + user_email)

然后将这些内容重定向到站点B:

https://siteb.tld/auth?timestamp=123454321&电子邮件= joe@example.com&散列= 78 g2gb2bg2kguigigbg2

然后Site B使用shared_secret(来自它自己的数据存储)和提供的信息片段来重新创建哈希。如果匹配,则视为已通过验证。然后它可以生成一个随机密码并通过电子邮件发送给用户。

为了安全起见,这应该通过SSL完成,正如我的链接所暗示的那样。出于隐私原因,电子邮件地址不应该以明文查询字符串的形式携带——虽然它们不能免于POST操作的拦截,但很少有设备(浏览器、服务器)会定期记录它们。

你不需要传递时间戳——如果系统时钟是NTP同步的,那么你可以四舍五入到最接近的十秒,然后在目标服务器上计算四舍五入两边的哈希值。这样可以提高安全性,因为创建哈希的方式不太明显。

不要使用MD5, SHA1或其他快速哈希-使用更复杂的东西。并确保防止来自单个IP地址的大量尝试(也许每个IP每小时30次?)这将防止暴力尝试通过后门进入站点B。