Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.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 如何使用API(一种安全的方法)验证用户信息?_Php_Json_Api_Security - Fatal编程技术网

Php 如何使用API(一种安全的方法)验证用户信息?

Php 如何使用API(一种安全的方法)验证用户信息?,php,json,api,security,Php,Json,Api,Security,我想知道是否有人知道如何用API验证用户名和密码,我敢肯定使用它是愚蠢和不安全的 我希望任何人都知道如何以一种安全的方式做到这一点 谢谢 使用安全连接,并在标题中提交用户名和密码是实现此目的的最佳方法 HTTPS确保用户不能简单地解析传输中的数据包。当然,即使在HTTPS中,在URL中抛出敏感数据也存在许多安全问题(请参见此处:)。这就是我们使用标题的原因 有关通过cURL发送头的信息,请参见此处: 一旦您发送了正确的头,API(当然)将需要基于这些头值进行授权 实现这一点最常见的方法是创建

我想知道是否有人知道如何用API验证用户名和密码,我敢肯定使用它是愚蠢和不安全的

我希望任何人都知道如何以一种安全的方式做到这一点


谢谢

使用安全连接,并在标题中提交用户名和密码是实现此目的的最佳方法

HTTPS确保用户不能简单地解析传输中的数据包。当然,即使在HTTPS中,在URL中抛出敏感数据也存在许多安全问题(请参见此处:)。这就是我们使用标题的原因

有关通过cURL发送头的信息,请参见此处:

一旦您发送了正确的头,API(当然)将需要基于这些头值进行授权

实现这一点最常见的方法是创建一个端点,该端点将使用您的用户名和密码进行授权,然后向您发送授权令牌。然后,一旦接收到该令牌,您只需在每个请求中包含该令牌。我已经看到代币是双向使用的;通过标题和url。最棒的是,使用有时间限制的访问令牌,您可以在URL本身内部使用令牌。然而,我是一个永远的悲观主义者,我建议人们仍然在标题中携带令牌,而不是URL


不过,在这一点上,您可以选择(除非您不控制API)。

使用安全连接,在标题中提交用户名和密码是实现这一点的最佳方法

HTTPS确保用户不能简单地解析传输中的数据包。当然,即使在HTTPS中,在URL中抛出敏感数据也存在许多安全问题(请参见此处:)。这就是我们使用标题的原因

有关通过cURL发送头的信息,请参见此处:

一旦您发送了正确的头,API(当然)将需要基于这些头值进行授权

实现这一点最常见的方法是创建一个端点,该端点将使用您的用户名和密码进行授权,然后向您发送授权令牌。然后,一旦接收到该令牌,您只需在每个请求中包含该令牌。我已经看到代币是双向使用的;通过标题和url。最棒的是,使用有时间限制的访问令牌,您可以在URL本身内部使用令牌。然而,我是一个永远的悲观主义者,我建议人们仍然在标题中携带令牌,而不是URL



不过,在这一点上,选择权归你(除非你不控制API)。

Ajax会帮你完成这项工作吗?确保ajax使用XSRF令牌是安全的,并且只验证服务器端?不要像这样在get字符串中传递凭据。URL将写入服务器上的访问日志。您不希望日志中出现大量用户名/密码。使用一个标题,并可能使用一些已建立的内容,如基本身份验证。此外,安全意味着对所有内容都使用https。这方面也有既定的标准。看看OAuth 1或2。好的,那么,如何使用标题呢?你是什么意思?任何人都可以在请求中设置他们想要的任何标题。如何设置标头取决于他们用来访问API的内容。这些只是标准的HTTP请求头。在服务器上,您可以在
$\u服务器['HTTP\u header\u NAME']
中检查头的值,其中
header\u NAME
是请求头的名称。Ajax可以帮您完成这项工作吗?确保ajax使用XSRF令牌是安全的,并且只验证服务器端?不要像这样在get字符串中传递凭据。URL将写入服务器上的访问日志。您不希望日志中出现大量用户名/密码。使用一个标题,并可能使用一些已建立的内容,如基本身份验证。此外,安全意味着对所有内容都使用https。这方面也有既定的标准。看看OAuth 1或2。好的,那么,如何使用标题呢?你是什么意思?任何人都可以在请求中设置他们想要的任何标题。如何设置标头取决于他们用来访问API的内容。这些只是标准的HTTP请求头。在服务器上,您可以在
$\u server['HTTP\u header\u NAME']
中检查头的值,其中
header\u NAME
是请求头的名称。除了初始连接/握手中的域名/服务器名外,url的其余部分通过https加密,因为它只是包含路径部分的头。您只是不想在url中包含敏感内容,因为这些内容会写入服务器上的日志文件。您不希望文件中到处都是未更改的用户名/密码。@JonathanKuhn一旦建立,是的,您是正确的。我想我过于简化了。请看这里:DNS请求等其他问题也会造成威胁,这也是您不将其包含在URL中的另一个原因。编辑了这篇文章以反映我过于简化/不准确。我将查看标题:)以更直接地回答您的问题:
curl\u setopt($myCurl,CURLOPT\u HTTPHEADER,array('Username:'.$Username,'Password:'.$Password))@NateI URL使用https加密,从未发送到DNS。但是,是的,最好不要将登录名/密码放在url中,以避免登录。除了初始连接/握手中的域名/服务器名,url的其余部分通过https加密,因为它只是一个包含路径部分的头。您只是不想在url中包含敏感内容,因为这些内容会写入服务器上的日志文件。您不希望文件中到处都是未更改的用户名/密码。@JonathanKuhn一旦建立,是的,您是正确的。我想我过于简化了。请看这里:DNS请求等其他问题也会造成威胁,这也是您不将其包含在URL中的另一个原因。编辑这篇文章是为了反映我的过度简化/不准确。我将查看标题:)以更直接地回答您的问题:
curl\u setopt