Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.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_Ajax_Api_Codeigniter - Fatal编程技术网

Php 开发API-如何使其安全?

Php 开发API-如何使其安全?,php,ajax,api,codeigniter,Php,Ajax,Api,Codeigniter,我将读写方法组合到数据库中,并通过URL公开它们(我使用CodeIgniter框架,并使用URL段将参数传递给这些方法)。最初的想法是让我的Ajax脚本调用这些方法。然而,现在我想我可能会向任何开发人员公开这些方法 我应该怎么做才能确保只有经过授权的开发人员使用我的API?我认为他们应该为每个方法调用传递一个API密钥和密码。如果我向他们提供这些细节,这是否足够安全 另外,我认为我应该支持POST而不是GET,因为一些必需的参数可能不适合URL段。想法?也许你应该看看OAuth。这是一个开放协议

我将读写方法组合到数据库中,并通过URL公开它们(我使用CodeIgniter框架,并使用URL段将参数传递给这些方法)。最初的想法是让我的Ajax脚本调用这些方法。然而,现在我想我可能会向任何开发人员公开这些方法

我应该怎么做才能确保只有经过授权的开发人员使用我的API?我认为他们应该为每个方法调用传递一个API密钥和密码。如果我向他们提供这些细节,这是否足够安全


另外,我认为我应该支持POST而不是GET,因为一些必需的参数可能不适合URL段。想法?

也许你应该看看
OAuth
。这是一个开放协议,允许桌面和web应用程序以简单标准的方法进行安全的API授权。


老实说,我自己也没有尝试过,但是当你提到
授权开发人员使用我的API时,我想到的第一件事就是这个。只是一个想法。

首先:需要HTTPS

HTTPS确保在发送任何请求数据之前建立安全通道。是,在发送任何请求数据之前:URL、标题、Cookie、GET或POST参数。。。任何东西这意味着您可以使用简单的方法,例如HTTPS上的HTTP基本身份验证,而不会使用户的凭据处于危险之中

这实际上是不可协商的,除非通过API传递的数据是真正公开的。如果您没有使用HTTPS,那么可以以纯文本嗅探与API(包括HTTP基本凭据)的任何通信

主要网站(如Facebook)不使用HTTPS的唯一原因是它在大规模应用中变得昂贵

如果您绝对不能运行HTTPS,那么您应该研究OAuth,它正是在这种情况下在API身份验证方面取得了长足的进步。使用OAuth,您可以对用户进行身份验证,同时在未加密的通道上对凭据保密

第二:身份验证不是授权

不要盲目信任来自经过身份验证的API用户的数据。确保他们访问的方法和操作是适当的,否则您可能会给您的用户提供进入其他用户数据或管理功能的后门

还有很多事情要做,但是如果你遵循这两个原则,你就走上了自己的道路。

实现OAuth将有助于你所要做的事情。我不确定您保护的是哪种类型的数据,但我同意TradyBlix的观点,这可能是最好的。我以前实现过它,不难理解,它有很多API,可以利用它处理用户数据


您应该考虑的另一件事是将API密钥限制在域中,因此开发人员只能从自己的域中使用他们的API密钥,这基本上防止了未经授权的开发人员获得访问权,至少不会获得对授权域和相应密钥的访问权。

这是非常好的建议,John。完美答案:)SSL(您称之为“HTTPS”)不是“完美”解决方案。这不会以任何方式保护您,例如CSRF,它只会隐藏双方之间的通信内容。它也不能保护API不被无权访问它的人使用。OAuth是一个不同的解决方案-它不能取代SSL。。。OAuth是用于安全访问的,它是“开放协议,允许以简单和标准的方法进行安全API授权”,而不是像SSL/TLS那样加密各方之间的整个通信。我知道OAuth不是加密。关键是,这意味着您可以使用已签名的请求通过不安全的协议进行通信,而无需传递实际凭据,因此API提供者和使用者都可以信任另一方,而无需TLS。就CSRF而言,“身份验证不是授权”是大多数漏洞的核心。在CSRF攻击中,您有一个经过身份验证的用户(无意中)执行攻击者自己的请求:错误是假设来自经过身份验证的用户的任何请求都是正常的。针对CSRF的保护不是在身份验证级别,而是在授权级别。OAuth实际上是授权第三方应用程序代表您使用API。例如:OAuth允许我(Twitter用户)安全地授权iPhone应用程序通过官方API对我自己的Twitter进行一定程度的访问。关于按域限制的好主意。我想这可能对我有用。