我需要保护我的API吗?

时间:2012-03-15 14:43:29

标签: api security authorization

我正在为我的网站开发API服务。我已经阅读了很多关于这个主题的内容,但无法确定哪种解决方案适合我。

我的API很简单。每个用户都会获得连接到我网站的每个应用 API密钥。 只有2个不同的呼叫atm:

  • SEND_DATA
  • GET_DATA

get_data安静无害,使用send_data,您可以将新条目结束到您的迷你应用程序。虽然呼叫有限,但可能会出现安全问题。如果数据落入坏人之手,那么这些数据都不会有用。服务器端我受sql注入等保护。

电话是这样的: http://example.com/api/?call=send_data&data=DATAXYZ&api_key=KEY

专业人士:

  • 它非常易于使用

骗局:

  • 这不安全

我在这里和其他地方阅读了很多类似的问题,并且OAuth作为几乎所有这些问题的可能答案弹出。我知道OAuth,我认为这对我想要易于用户使用的东西来说是一个很大的开销。

如本文所述,并不总是需要使用授权: http://blog.apigee.com/detail/do_you_need_api_keys_api_identity_vs._authorization/

这也适用于我的情况,或者您是否仍然建议使用或不使用OAuth进行身份验证?

2 个答案:

答案 0 :(得分:2)

不要将API密钥作为GET参数发送:它至少会记录在浏览器的历史记录中(也可能在代理中,如果有的话),这不是很安全。发布它。

我认为这不是不安全的,事实上广泛使用的基本访问身份验证将用户名和密码作为纯文本(base64编码)发送,事实上当使用表单登录任何Web服务时,你是也将密码作为纯文本发送。当然这是假设客户端和服务器之间的通信是安全的,所以你可能想要使用HTTPS。

答案 1 :(得分:1)

我个人在多个商业项目中使用类似的API身份验证方法 到目前为止,我从来没有遇到安全问题,但我使用的方法略有不同。

我做的不同:
a)API调用使用user-id / login和API密钥 b)API密钥是用户密码的盐渍md5哈希值(您可以将用户ID和其他内容添加为盐)
这意味着人们不太可能试图“猜测”API密钥,您也可以更轻松地查看谁在您的日志中使用您的API(无需查找API密钥)。
用户可以通过更改密码来更改其API密钥,因此如果他们认为API凭据可能已泄露,那么他们只需更改密码即可。

关于GET / POST:如果您的用户自己不使用API​​(例如将其包含在自己的工具/脚本/代码中),那么我会使用POST作为serans建议。
但POST有几个缺点,使用它并不“简单”。它只需要更多的工作来实施 所以我会提供GET和POST,只是添加一个关于可能的安全问题的说明。