Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-在两台服务器之间安全地发送请求/响应?_Php_Api_Security_Post - Fatal编程技术网

PHP-在两台服务器之间安全地发送请求/响应?

PHP-在两台服务器之间安全地发送请求/响应?,php,api,security,post,Php,Api,Security,Post,总结: 我已经用PHP创建了一个应用程序。这是呼叫中心的销售线索管理系统。我现在需要允许合作伙伴通过将我们的应用程序与他们的专有CRM集成,为应用程序添加新的潜在客户。简而言之,我想我需要为我的应用程序构建一个API 我能想到的最简单的方法是一篇简单的HTML文章。这会被认为太不安全吗?如果是这样,对于这种情况,什么是最好的方法 谢谢你的帮助 Andrew.这正是API的用途。我会为每个外部帐户创建一个唯一的密钥,并要求为发送到服务器的每个$\u GET或$\u POST事务使用该API密钥 您

总结: 我已经用PHP创建了一个应用程序。这是呼叫中心的销售线索管理系统。我现在需要允许合作伙伴通过将我们的应用程序与他们的专有CRM集成,为应用程序添加新的潜在客户。简而言之,我想我需要为我的应用程序构建一个API

我能想到的最简单的方法是一篇简单的HTML文章。这会被认为太不安全吗?如果是这样,对于这种情况,什么是最好的方法

谢谢你的帮助


Andrew.

这正是API的用途。我会为每个外部帐户创建一个唯一的密钥,并要求为发送到服务器的每个$\u GET或$\u POST事务使用该API密钥

您可能希望在运行时构建API管理控制台。哦,别忘了API键的单独DB表

当您完成时,它将类似于:


你明白了。

这正是API的用途。我会为每个外部帐户创建一个唯一的密钥,并要求为发送到服务器的每个$\u GET或$\u POST事务使用该API密钥

您可能希望在运行时构建API管理控制台。哦,别忘了API键的单独DB表

当您完成时,它将类似于:


你明白了。

一篇HTML文章就足够了,这不是问题。如果您能够使用HTTPS来确保传输的数据被编码,那就更好了,但这并不重要

保护此类API的最常见方法是提供一个共享的“秘密”或“密钥”,用于对哈希进行编码。然后,您将能够验证请求是否来自受信任的来源,但这取决于用户确保他们对共享密钥保密

e、 g.API的用户需要:

// build hash string to be sent with API POST request (use a sensible combination of values)
$string = sprintf('%s.%d.%d.%d', $username, $orderId, $currentTimestamp, $price);

// hash
$encodedString = sha1($string);

// concatenate with shared key
$stringWithKey = sprintf('%s.%s', $encodedString, $sharedKey); // GET KEY FROM SECURE PLACE

// hash again to get hash that will be sent with the POST request
$hash = sha1($stringWithKey);

然后,您将根据提供的POST值执行相同的逻辑,并验证它们的哈希值是否与您使用用户的共享密钥构建的哈希值匹配。

HTML POST就足够了,这不是问题。如果您能够使用HTTPS来确保传输的数据被编码,那就更好了,但这并不重要

保护此类API的最常见方法是提供一个共享的“秘密”或“密钥”,用于对哈希进行编码。然后,您将能够验证请求是否来自受信任的来源,但这取决于用户确保他们对共享密钥保密

e、 g.API的用户需要:

// build hash string to be sent with API POST request (use a sensible combination of values)
$string = sprintf('%s.%d.%d.%d', $username, $orderId, $currentTimestamp, $price);

// hash
$encodedString = sha1($string);

// concatenate with shared key
$stringWithKey = sprintf('%s.%s', $encodedString, $sharedKey); // GET KEY FROM SECURE PLACE

// hash again to get hash that will be sent with the POST request
$hash = sha1($stringWithKey);

然后,您将根据提供的POST值执行相同的逻辑,并验证它们的哈希值是否与您使用用户的共享密钥构建的哈希值匹配。

通过构建API的过程,您很可能会遇到其中一些。我将概述一些概念,这些概念对于实际构建一个可用的、遵循开放标准的API可能非常有用,而开放标准又使得第三方修改现有代码以与之交互变得微不足道

API配置 第一个关键字是:SSL。永远不要想不使用它。这提供了一个安全套接字层,在该层上可以以安全的方式进行通信,从而使窃听和MitM攻击变得更加难以想象

无论如何,不要跳过这一步。证书的成本不到60美元/年,因此它并不十分昂贵,而且从长远来看可以为您节省很多

在服务器技术方面,使用您想要的。您的主要需求是一个能够处理四个常见HTTP谓词的Web服务器:GET、POST、PUT和DELETE。我马上解释原因

API授权 这是一个有争议的领域,因为许多人认为他们有一个安全的方法来做到这一点。答案根本不是真的。身份验证的要点是允许客户端轻松地使用其凭据进行身份验证,但要防止没有特权的第三方这样做

只需在提要中添加一个API密钥,最终就会有人获得它。我已经看过很多次了,所以我强烈建议不要这样做,特别是因为有更容易的选择

我将检查一些东西,分别将它们标记为a或S,以进行身份验证和签名。签名是用于呈现请求防篡改的方法。身份验证证明你是谁

HMAC-SHA512签名A S Amazon在其所有S3/AWSAPI中都使用了这种技术,它是一种非常轻量级的请求签名和身份验证方法。我个人觉得它比较有创意

基本思想是:

将所有GET和POST字段(包括您的公钥)括起来 按字母顺序排列 使用URLEncode或等效工具连接它们 使用您的私钥作为HMAC的密钥,对数据执行HMAC哈希密码。 将4的结果附加到您的请求中。 这是简单而巧妙的。它所保证的:

在不知道私钥和公钥的情况下,无法更改请求 如果不进行更改,则无法更改密钥 g.请求 这使用相同的HTTP请求巧妙地包装了这两个问题,代价是保留了一个GET/POST字段。Amazon还要求请求中存在时间戳,以防止重播攻击。干净利落

参考:HMAC-ALGO=ALGO键XOR PAD concat ALGO键XOR PAD2 concat消息。ALGO可以是任何哈希密码-SHA256因其轻量级特性而成为首选

非统组织A 你可能听说过。想法很简单:你得到一把钥匙和一个秘密。这允许您排队等待临时令牌。然后使用该令牌执行请求

它的主要优点是有很多库来处理它,包括客户端和服务器端。另一个优点是OAuth有两种操作模式:两条腿的服务器->没有客户端交互的服务器和三条腿的客户端->服务器->服务器

主要缺点是需要2个HTTP请求来获取令牌

只需通过 。。。导致重播攻击。不要考虑。

方法的混合是一种可能的事情。例如,当与OAuth结合使用时,HMAC标识非常棒

API概念 如今的API端点遵循两个主要标准:SOAP XML-RPC或REST。如果您正在构建一个端点来发布潜在客户,那么您也可以构建相应的API来读取潜在客户并在将来删除潜在客户

因此,您的API将采用以下形式:

 /my/endpoint/
  - GET: gets a list of leads
  - POST: creates a new lead
 /my/endpoint/ID/
  - GET: get lead info
  - PUT: modifies lead
  - DELETE: deletes the lead

这也使您能够方便地对API进行未来验证。

通过构建API的过程,您很可能会遇到其中一些问题。我将概述一些概念,这些概念对于实际构建一个可用的、遵循开放标准的API可能非常有用,而开放标准又使得第三方修改现有代码以与之交互变得微不足道

API配置 第一个关键字是:SSL。永远不要想不使用它。这提供了一个安全套接字层,在该层上可以以安全的方式进行通信,从而使窃听和MitM攻击变得更加难以想象

无论如何,不要跳过这一步。证书的成本不到60美元/年,因此它并不十分昂贵,而且从长远来看可以为您节省很多

在服务器技术方面,使用您想要的。您的主要需求是一个能够处理四个常见HTTP谓词的Web服务器:GET、POST、PUT和DELETE。我马上解释原因

API授权 这是一个有争议的领域,因为许多人认为他们有一个安全的方法来做到这一点。答案根本不是真的。身份验证的要点是允许客户端轻松地使用其凭据进行身份验证,但要防止没有特权的第三方这样做

只需在提要中添加一个API密钥,最终就会有人获得它。我已经看过很多次了,所以我强烈建议不要这样做,特别是因为有更容易的选择

我将检查一些东西,分别将它们标记为a或S,以进行身份验证和签名。签名是用于呈现请求防篡改的方法。身份验证证明你是谁

HMAC-SHA512签名A S Amazon在其所有S3/AWSAPI中都使用了这种技术,它是一种非常轻量级的请求签名和身份验证方法。我个人觉得它比较有创意

基本思想是:

将所有GET和POST字段(包括您的公钥)括起来 按字母顺序排列 使用URLEncode或等效工具连接它们 使用您的私钥作为HMAC的密钥,对数据执行HMAC哈希密码。 将4的结果附加到您的请求中。 这是简单而巧妙的。它所保证的:

在不知道私钥和公钥的情况下,无法更改请求 如果不更改请求,则无法更改密钥 这使用相同的HTTP请求巧妙地包装了这两个问题,代价是保留了一个GET/POST字段。Amazon还要求请求中存在时间戳,以防止重播攻击。干净利落

参考:HMAC-ALGO=ALGO键XOR PAD concat ALGO键XOR PAD2 concat消息。ALGO可以是任何哈希密码-SHA256因其轻量级特性而成为首选

非统组织A 你可能听说过。想法很简单:你得到一把钥匙和一个秘密。这允许您排队等待临时令牌。然后使用该令牌执行请求

它的主要优点是有很多库来处理它,包括客户端和服务器端。另一个优点是OAuth有两种操作模式:两条腿的服务器->没有客户端交互的服务器和三条腿的客户端->服务器->服务器

主要缺点是需要2个HTTP请求来获取令牌

只需通过 。。。导致重播攻击。不要考虑。

方法的混合是一种可能的事情。例如,当与OAuth结合使用时,HMAC标识非常棒

API概念 API endpoi 现在的nts遵循两个主要标准:SOAPXML-RPC或REST。如果您正在构建一个端点来发布潜在客户,那么您也可以构建相应的API来读取潜在客户并在将来删除潜在客户

因此,您的API将采用以下形式:

 /my/endpoint/
  - GET: gets a list of leads
  - POST: creates a new lead
 /my/endpoint/ID/
  - GET: get lead info
  - PUT: modifies lead
  - DELETE: deletes the lead

这也使您能够方便地对API进行未来验证。

您需要隐藏传输中的数据,以便其他人看不到它,或者你需要验证它,以便其他人不能伪造它?只有授权用户帐户才能添加线索,因此我需要验证传输。最简单的解决方案是使用共享密钥对post请求进行签名。@Maerlyn,并始终使用HTTPS。因此,这只是我们给他们的静态字符串,还是生成了此密钥不知怎的?你需要隐藏传输中的数据,这样其他人就看不见了,或者你需要验证它,以便其他人不能伪造它?只有授权用户帐户才能添加线索,因此我需要验证传输。最简单的解决方案是使用共享密钥对post请求进行签名。@Maerlyn,并始终使用HTTPS。因此,这只是我们给他们的静态字符串,还是生成了此密钥不知何故,仅仅发送一个API密钥并不能阻止任何人重播请求或简单地窃取密钥,特别是当它通过GET时,它将被登录:您的路由器、请求通过的所有节点、远程服务器的日志。只需发送一个API密钥就不会阻止任何人重放请求或简单地删除密钥,特别是当它通过GET时,它将被登录:路由器、所有通过请求的节点、远程服务器的日志。考虑签名。