如何在PHP中没有MySQL的情况下将数据从一个站点传输到另一个站点

时间:2014-07-02 21:20:18

标签: php database

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

情景:

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

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

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

在站点B上,已有系统以数组中的用户名/密码存储的方式登录。

我的问题:

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

  • 如何有效地从站点A和站点B发送(例如<form>变量username / pwd)?
  • 在我通过某种方式收到网站B中的用户名/密码后,我能存储这些信息的最有效方法是什么?备案?或者其他一些方式,以便我可以使用此信息登录站点B上的用户?

2 个答案:

答案 0 :(得分:1)

以下是基本参考:http://us2.php.net/manual/en/ref.curl.php。您需要研究PHP的cURL函数 - 这些函数旨在通过网络组合和发送请求。如果您传递敏感信息(用户名和密码),则这些请求确实需要通过https或其他安全协议进行。如果您在网络中存储网站的用户名和密码,那么您将无法动态创建用户。

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

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

整个设置真的没什么特别的 - 通过GET你将数据作为网址的一部分发送。使用POST,您将其与请求一起发送(URL是请求的一部分,但POST数据不是'嘈杂',因为它不存储在您的网站历史记录中,通常不存储在服务器日志中)。在内部,整个过程通过标头的传输发生。如果您不熟悉,您应该查看它们以及HTTP的底层机制如何工作。这是您每次访问网站时浏览器所经历的过程 - 但您的浏览器会隐藏您的详细信息。

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

答案 1 :(得分:0)

我似乎记得,我回答了similar question before here。它有点不同,因为你没有数据库,但原理大致相同:你需要一个单点登录(SSO)系统。

您可以自己构建一个:每个站点都有一个用于散列和/或加密的共享密钥。让我们说用户成功登录到站点A.然后他们做了一些让站点B为他们生成用户名/密码的东西,因此站点B需要一种方法来区分真正的请求和欺诈性的请求。

您可以在网站A上生成哈希:

  

hash = hash_func(shared_secret + timestamp + user_email)

然后我们通过重定向将这些内容传递给网站B:

  

https://siteb.tld/auth?timestamp=123454321&email=joe@example.com&hash=78g2gb2bg2kguigigbg2

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

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

您不必传递时间戳 - 如果系统时钟是NTP同步的,那么您可以舍入到最近的十秒,然后计算目标服务器上四舍五入的任一侧的哈希值。这可以提高安全性,因为创建哈希值的方式不太明显。

不要使用MD5,SHA1或其他快速哈希 - 使用更复杂的东西。并确保从单个IP地址(可能每小时每个IP 30个?)中阻止站点B中的大量尝试。这样可以防止蛮力企图通过后门进入B站点。