API基于用户IP地址

时间:2013-10-19 00:20:33

标签: php api security

我开发了一个API来获取所有数据。

该网站没有用户注册系统或任何标识用户调用API的内容。如果我可以识别打电话的用户,每当有人滥用或攻击API时,我甚至可以禁止他的IP。

我正在考虑根据用户IP或MAC地址生成API密钥,但这样做是否安全?还有其他建议吗?

4 个答案:

答案 0 :(得分:3)

首先,您将无法获得最终用户的MAC地址。即使您读取传入数据包的MAC地址,您也只能获得路由器的MAC地址(您绝对不想禁用它!)

用户IP非常容易更改和/或欺骗(例如恶意软件或混淆代理的Javascript)。阻止那些提出错误请求仍然是个好主意,但你肯定不想用它们进行身份验证。

您应该考虑HTTP请求中的所有内容(路径,标头等)攻击者控制的输入,并且绝对不会仅根据其中包含的信息做出身份验证决策。

你提到你有一个PHP后端。为什么不构建一个系统来通过它生成API密钥?

答案 1 :(得分:2)

这是绝对错误的,你无法获得用户的MAC地址,没有办法从JS / PHP

NAT后面的许多用户将拥有相同的IP地址,因此您将无法区分它们

答案 2 :(得分:2)

您说没有用户注册系统,那么为什么要生成API密钥?

你不可能同时拥有这两个世界。请求是匿名的,或者用户注册,在这种情况下,您可以提供API密钥(最好是使用HTTPS以便密钥不被盗),并且可能根据您的使用情况进一步限制IP地址范围。

正如其他人所回答的那样,MAC地址仅在同一物理网络上可用。它们不通过路由器,因此它们不会通过Internet。您无法访问物理网络之外的任何人的MAC地址,除非您已经编写了一个收集它的自定义应用程序(并且这些应用程序可以被欺骗)。

IP地址可以是动态的,有些人可以根据地理位置,ISP,运营商或业务共享IP地址。此外,我们中的许多人都可以轻松更改我们的IP地址,因此很难通过IP地址管理访问。

存在一些陷阱,管理公共API需要额外的时间。您必须愿意关闭IP地址或IP地址范围,尽管您可能在滥用者的同时阻止无辜和正直的用户。如果您的申请是免费的,它可能会给您更多的自由,因为没有预期的服务水平和合同,但您可能希望通过法律协议保护自己。

许多公共API仍然按IP地址跟踪并实施tarpits,以简化任何似乎滥用系统的IP地址的请求。这样,来自同一IP地址的合法用户仍然可以继续,尽管速度较慢。

一般来说,如果你的服务很受欢迎,有人想攻击它,那通常是一个好兆头,所以不要过早担心它,但要保持领先。您不希望应用程序失败的原因是因为用户厌倦了在慢速服务器上等待。

您的另一个选择是让用户注册,这样您就可以在发现滥用行为时使用凭据而不是IP地址进行阻止。

答案 3 :(得分:1)

出于多种原因禁止IP地址并不是一个好主意。无论如何,黑客可以欺骗IP地址,因此这种技术毫无用处。

您可以做的是根据IP限制API调用。即限制每秒每IP的呼叫数量。

您可能会发现这有用:http://blog.programmableweb.com/2007/04/02/12-ways-to-limit-an-api/