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