保护未经过身份验证的REST API

Eri*_* B. 25 security api rest oauth yii2

我一直在阅读有关保护REST API的内容,并阅读了有关oAuth和JWT的内容.两者都是非常好的方法,但从我所理解的,它们都在用户通过身份验证后工作,或者换句话说"登录".这基于用户凭证生成oAuth和JWT,并且一旦获得oAuth令牌或JWT,用户就可以执行其授权的所有操作.

但我的问题是,登录和注册apis怎么样?如何保护他们?如果有人读取我的javascript文件以查看我的ajax调用,他们可以很容易地找到终点和传递的参数,并且他们可以通过一些REST客户端多次点击它,更严重的是他们可以编写一个程序来点击我的注册api说一千次,这将创造一千个垃圾邮件用户,或者他们甚至可以强行登录api.那么如何保护它们呢?

我在yii2中编写API.

Sal*_*ani 10

Yii 2.0框架有一个名为yii\filters\RateLimiter的内置过滤器,它实现了基于漏桶算法的速率限制算法.它允许您限制在特定时间间隔内接受的最大请求数.例如,您可以限制登录和注册端点在10分钟的时间间隔内接受最多100个API调用.超过该限制时,将抛出yii\web\TooManyRequestsHttpException异常(429 状态代码).

您可以在Yii2 RESTful API 相关文档或此SO帖子中阅读更多相关信息.

到目前为止,我没有自己使用它,但是我在官方文档中读到了它,我的意思是:

请注意,RateLimiter需要 $ user 来实现 yii\filters\RateLimitInterface.如果 未设置$ user或未实现 yii\filters\RateLimitInterface,则RateLimiter将不执行任何 操作.

我猜它只是通过使用用户相关的数据库表来设计与登录用户一起工作,这是高级模板中引入的默认数据库表.我不确定它但我知道它需要将允许的请求数和相关时间戳存储saveAllowance到您需要在用户类中定义的方法中的某些持久存储中.因此,我认为您必须按IP地址跟踪访客用户,因为@LajosArpad建议然后重新设计您的用户类以保存他们的身份,以便您可以启用它.

快速谷歌搜索让我这个扩展:yii2-ip-ratelimiter,你也可以看看.


Laj*_*pad 8

您的网址很容易确定.您应该有一个黑名单的IP地址,当IP地址可疑时,只需将其添加到黑名单.您可以定义可疑内容,但如果您不确定,可以从以下内容开始:

使用此模式创建类似数据库表的内容:

ip_addresses(ip,is_suspicious,login_attempts,register_attempts)

Where_suspicious表示它被列入黑名单.login_attemtps和register_attempts应该是json值,显示尝试登录/注册的ip地址的历史记录.如果最近20次尝试失败并且在一分钟之内,那么ip地址应该被列入黑名单.列入黑名单的IP地址应该收到一个响应,无论他们的请求是什么,他们都被列入黑名单.因此,如果他们拒绝您的服务或试图破解某些东西,那么您就会拒绝他们提供的服务.

例如,使用sha1保护密码.该算法足够安全,并且比sha256更快,例如,这可能是一种过度杀伤力.如果您的API涉及银行帐户或类似的非常重要的东西,那么重要的是 - 让坏人使用服务器园来破解它,然后强制用户创建非常长的密码,包括数字,特殊字符,大小写字母.