我如何保护API不被滥用?

时间:2009-09-10 01:35:58

标签: api protection spam abuse

嘿大家,我经营一个图片托管网站,我正在为它设计一个API。我担心的是,我不希望任何人能够做类似的事情:

while(true) { 
    Upload();
}

和垃圾邮件/ DoS网站。

我目前的解决方案是将所有IP地址限制为每天/每小时上传一定数量的内容。我相信这对于使用API​​的桌面应用程序会很好,但对于希望使用它的网站,所有用户都将使用相同的IP(服务器)。

我认为最好的解决方案是让用户帐户通过API进行身份验证,然后禁止每个帐户滥用它。这个问题是我的网站根本没有用户帐户,所有这些都是完全匿名的。

还能做些什么?我希望尽可能保持开放,同时有能力禁止明显滥用服务的用户/ IP。

7 个答案:

答案 0 :(得分:9)

如果您不想实现用户帐户,那么让那些想要使用api的人注册api密钥/秘密怎么样,你可以用它来限速。

答案 1 :(得分:4)

查看OAuth

答案 2 :(得分:3)

查看apiGrove等开源API管理工具; apiGrove.net或在apigrove.github.com/apigrove的GitHub上。 apiGrove支持各种API保护方法,包括IP白名单和密钥授权。

答案 3 :(得分:2)

在我工作的一家公司,我们为所有非付费客户实施了限制,每天限制一定数量的请求,理论上可根据API端点进行配置。如果您必须在每个请求中提供唯一ID作为应用程序密钥,则在轻量级API的QueryString中或在POST请求XML中提供更复杂的API。对于不使用公共API的最终用户,您可以改为传递身份验证令牌。

如果您提供公共API而不需要某种身份验证或授权,则必须采用基于IP地址的限制。但是,创建一个允许人们注册API访问权限的轻量级配置网页并不难。

您的应用程序逻辑可以根据我们所做的请求数量或每日带宽进行限制,如Flickr。

答案 4 :(得分:0)

需要上传令牌,并使用CAPTCHA限制令牌。使用代码就像:

// 1st request
var uploadToken = api.RequestToken(sessionIdFromUser);
if (uploadToken.RequireChallenge) {
   // requires challenge due to per IP limiting
   // uploadToken.Captcha could be a URL
   DisplayView(uploadToken.Captcha, uploadToken.SessionId); 
   return;
}
api.Upload(uploadToken, captchaFromUser, byte[]);

答案 5 :(得分:0)

正如其他人在此主题中所提到的,API密钥通常是这种情况下的方法。您的网站没有用户帐户这一事实并不重要:API密钥标识应用程序,而不是用户。 (事实上​​,如果您的网站确实有用户,那么您需要使用单独的机制在API调用中识别应用和用户 - 这就是OAuth非常有帮助的地方。)

如果您不想创建自己的开发人员注册流程,API密钥发布流程,限制代码等,我建议您查看我提供的WebServius(www.webservius.com)公司。您提供的API之上的托管API管理层。

答案 6 :(得分:0)

对于使用.NET开发的API,您可以使用API Protector .NET

查看此答案:https://stackoverflow.com/a/56075128/1679165