安全API身份验证

时间:2011-11-26 14:27:37

标签: php security api authentication

我正在为游戏统计系统创建自己的API(在PHP中)。 我希望用户能够从他们的游戏中登录系统。

基本上,游戏是用GM制作的:HTML5(适用于HTML5的GameMaker),这意味着它只是模糊处理,但仍然可以使用任何JavaScript调试器读取。

要使其工作,用户必须包含一个将连接到我的API系统的PHP库。 但是,我想通过使用API​​密钥限制访问。

如果我发送带有请求的API密钥,它将是可见的(例如,使用Firefox的开发者控制台)。使用该API密钥,任何人都可以“登录”并提交统计数据。

我想做的是,使用登录请求以加密形式发送托管游戏的域。 (只是从我的PHP库向服务器发出一个简单的GET请求)。然后服务器必须解密该字符串(加密域/ IP)并检查它是否与API密钥匹配,该密钥也随请求一起发送。

但我想知道,这实际上是多么安全。

如果不安全,那会是更好的方法吗?

3 个答案:

答案 0 :(得分:1)

您可以考虑使用OAuth 1.0(如果您有SSL连接则使用2.0)。这是一个已经证明自己适用于Twitter和Facebook等网站的协议,但实施起来相当简单。

http://tools.ietf.org/html/rfc5849

但是,请注意,最终没有安全库是安全的。 iOS5的OAuth库在第一个开发者预览版发布一天后就被破解了。基本规则:如果用户有权访问二进制版本,则不安全。

答案 1 :(得分:0)

这是对CWE-602的隐含违规,永远不会成为此问题的解决方案。攻击者始终可以使用TamperData之类的工具来拦截和修改请求,或者通过其他方式修改代码。也许你正在寻找“(In)安全,虽然默默无闻”。

答案 2 :(得分:-1)

选项2:

编写自己的协议。请务必考虑所有这些因素:

  • 数据不得在代理级别上编辑(对所有字段进行签名)
  • 请求不得重播(添加必须唯一的随机nonce)
  • 必须立即执行请求(添加时间参数)

您需要API系统,因此请包含API密钥。