1

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

该站点没有用户注册系统或任何可以识别调用 API 的用户的东西。如果我能识别拨打电话的用户,那么每当有人滥用或攻击 API 时,我什至可以禁止他的 IP。

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

4

4 回答 4

3

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

用户 IP 很容易更改和/或欺骗(例如,恶意软件或混淆的代理 Javascript)。阻止那些发出错误请求的人仍然是一个好主意,但您绝对不想将它们用于身份验证。

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

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

于 2013-10-19T00:25:32.710 回答
2

绝对错误,无法获取用户的MAC地址,JS/PHP没有办法

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

于 2013-10-19T00:25:41.333 回答
2

你说没有用户注册系统,那你为什么要生成API key?

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

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

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

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

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

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

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

于 2013-10-19T02:13:31.523 回答
1

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

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

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

于 2013-10-19T01:00:06.813 回答