Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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_Security_Web Applications_Sniffing_Api Key - Fatal编程技术网

Php 在应用程序中实现(安全)Api密钥

Php 在应用程序中实现(安全)Api密钥,php,security,web-applications,sniffing,api-key,Php,Security,Web Applications,Sniffing,Api Key,我编写了一个Web应用程序,我希望允许其他开发人员从中获取信息 我正在使用的服务器不是那么糟糕,也不能处理那么多请求,所以我们的想法是生成api密钥,并将其分配给每个想要查询我们信息的人。使用Api键,我可以限制每天的请求,或许还可以收集一些统计数据,看看哪些信息对其他开发人员真正有用 问题是,我担心它的安全性。因为Api密钥将被发送到我们的服务器(通过GET/POST等),所以有人可以用wireshark嗅探请求,不费吹灰之力就获得开发者的Api密钥,对吗 我考虑过生成一个密钥和一个API密钥

我编写了一个Web应用程序,我希望允许其他开发人员从中获取信息

我正在使用的服务器不是那么糟糕,也不能处理那么多请求,所以我们的想法是生成api密钥,并将其分配给每个想要查询我们信息的人。使用Api键,我可以限制每天的请求,或许还可以收集一些统计数据,看看哪些信息对其他开发人员真正有用

问题是,我担心它的安全性。因为Api密钥将被发送到我们的服务器(通过GET/POST等),所以有人可以用wireshark嗅探请求,不费吹灰之力就获得开发者的Api密钥,对吗

我考虑过生成一个密钥和一个API密钥。然后我可以指示其他开发人员将它们连接起来,并将其散列发送到我们的API。然后我将验证哈希是否有效,并允许请求。。。但同样的问题还会继续存在。黑客仍然可以嗅出该散列并代表其他开发者的应用程序发出请求

所以我的问题是

  • 我怎样才能避免这个问题
  • 或者更好的是,我的担心是正确的吗?这真的是个问题吗
  • 有没有更好、更安全的方法来允许访问我的信息,而不会使其他开发人员感到太复杂

你们怎么看?

关于嗅探,您的问题可以通过服务器上的HTTPS解决。

我认为您正在尝试解决一系列不同的问题

如果您的目标是限制对服务器的请求数量,那么应该创建一个限制机制。这是非常重要的,但我会基于IP地址而不是许可证密钥—单个许可证用户可能会用大量请求淹没您的系统。您可以通过IP地址进行限制,而无需实施许可机制

如果你想创建一个许可证方案,你需要了解密码学等-这是一个非常重要的问题。例如,如何阻止合法用户与其所有朋友共享其许可证密钥?你如何阻止黑客窃取你的钥匙并与他的所有朋友共享


有很多解决方案——它们都会给用户带来一定程度的痛苦。例如,您可以在HTTPS上运行您的服务;这会停止窥探,但会降低性能。您可以为您的服务发行“代币”,该代币在一定次数的使用后到期;获取新令牌需要加密交换(可能会检查您的IP地址)。您可能需要“质询/响应”类型的逻辑(包括IP地址验证)。所有这些步骤都让用户的生活更加艰难;他们可能不会因为要做的额外工作而太感谢你

如果您想限制访问+潜在的一些使用率限制,那么在API上设置一些身份验证肯定是有意义的。如果您使用API密钥并希望避免嗅探,那么HTTPS绝对是一种选择。如果这不是一个选项,那么您也可以使用类似oAuth 1.0的哈希样式的身份验证(http://oauth.net/core/1.0/)或亚马逊AWS认证。它们通过向API用户颁发ID和密码来工作。他们通过将秘密插入消息体、计算散列并在请求中包含散列(而不是秘密),在客户端使用秘密。在传入端,您将散列与对消息内容执行的相同操作进行比较,其中包含特定的机密

这意味着您可以验证发送方,而无需通过网络发送机密(注意,内容仍然不安全,但您可以避免在每次请求时通过网络传递密钥)。缺点是开发人员实现起来很复杂。即使您使用oAuth 1.0模式(其中有库),也会有一点开销


我在3scale工作,我们的一些工具可能也会有所帮助-我们的系统提供API密钥、oAuth秘密共享以及现成的API速率限制(http://www.3scale.net PHP库在这里:)。

我无意中否决了这一点(我甚至不记得读过这篇文章)。我怎样才能解开这个。