【问题标题】:Developing API - how to make it secured? [closed]开发 API - 如何使其安全? [关闭]
【发布时间】:2011-08-26 21:43:54
【问题描述】:

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

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

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

【问题讨论】:

    标签: php ajax api codeigniter


    【解决方案1】:

    实施 OAuth http://oauth.net/documentation/getting-started/ 将适用于您正在尝试做的事情。我不确定您要保护哪种类型的数据,但我同意 TradyBlix 这可能是最好的。我以前实现过它,并不难弄清楚,它有很多使用它来处理用户数据的 API 的文档。

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

    【讨论】:

    • 关于按域限制的好主意。我认为这可能对我有用。
    【解决方案2】:

    首先:需要 HTTPS

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

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

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

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

    第二:认证不是授权

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

    除此之外还有很多,但如果您遵循这两个原则,您就在路上。

    【讨论】:

    • 这是非常好的建议,约翰。完美答案:)
    • SSL(被您称为“HTTPS”)不是“完美”的解决方案。这不会以任何方式保护您,例如。 CSRF,它只隐藏了各方之间的通信内容。它也不保护那些无权访问 API 的人。 OAuth 是一种不同的解决方案——它不会取代 SSL……OAuth 用于安全访问是“开放协议,允许以简单和标准的方法进行安全 API 授权”,而不是像 SSL / TLS 那样加密整个通信派对。
    • 我知道 OAuth 不是加密。关键是这意味着您可以使用签名请求通过不安全的协议进行通信,而无需传递实际凭据,因此 API 提供者和消费者都可以信任对方,而无需任何类似 TLS 的东西。
    • 就 CSRF 而言:“身份验证不是授权”是大多数这些漏洞的核心。在 CSRF 攻击中,您有一个经过身份验证的用户(无意中)执行攻击者自己的请求:错误是假设来自经过身份验证的用户的任何请求都是正常的。针对 CSRF 的保护不在身份验证级别,而是在授权级别。
    【解决方案3】:

    也许您应该查看OAuth。我是An open protocol to allow secure API authorization in a simple and standard method from desktop and web applications.

    说实话,我自己还没有尝试过,但当你提到authorized developers use my API 时,我首先想到的是。只是一个想法。

    【讨论】:

    • OAuth 实际上是授权第三方应用程序代表您使用 API。例如:OAuth 让我(一个 Twitter 用户)通过官方 API 安全地授权 iPhone 应用程序对我自己的 Twitter 具有一定的访问权限。
    猜你喜欢
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 2011-05-03
    相关资源
    最近更新 更多