사용자당 속도 제한
응용 프로그램 데이터(예를 들어 사용자 ID나 사용자 충성도)에 따라 요청을 속도 제한하기를 원하지만, 응용 프로그램 층 이전에 속도 제한을 적용하기를 원하기 때문에 클라이언트가 제공한 값을 신뢰할 수 없습니다.
이것은 흔히 볼 수 있는 문제로 업계 표준 방법이 IP(또는 CIDR 블록)를 통해 속도 제한을 할 수 있다.실제로 일부 popularCDNs는 IP 키 제어의 속도 제한만 지원한다.불행하게도 IP 기반의 제한은 통상적으로 부족하다. 왜냐하면 너무 많은 악성 데이터를 허용하거나 대량의 합법적인 사용자를 막았기 때문이다. (운영자급이나 사무실NAT 뒤에 많은 사용자가 있다고 상상해 보자.)
The Solution
"공격자에 대한 가치"가 매우 광범위할 수 있으므로, 속도 제한 목표를 반영했는지 확인하십시오.
NGINX는 이를 쉽게 지원할 수 있습니다.다음은
uid
쿠키에서 전달된 사용자 ID를 통해 속도 제한을 하는 예입니다.map $cookie_uid $rate_limit_key {
"" $binary_remote_addr;
default $cookie_uid;
}
limit_req_zone $rate_limit_key zone=auth:10m rate=10/s;
이 코드 세그먼트는 사용자와 IP에 동일한 제한을 적용하지만 두 개limit_req_zone
를 사용하여 그룹마다 다른 제한을 적용할 수 있다.Concerns
Lock-out on Mismatch
일치하지 않는다고 해서 사용자를 잠그지 않도록 하십시오.예를 들어 쿠키에서 사용자 ID를 검증하기 위해 인증 영패를 사용한다면 인증 영패가 만료되거나 취소되면 401을 되돌려주지 마십시오.이것은 사용자가 모든 요청을 막고 문제를 해결할 뚜렷한 방법이 없게 할 것이다.(지원 팀에서 쿠키를 제거하도록 요청할 수도 있습니다.)
위에서 말한 바와 같이 신뢰할 수 없는 데이터를 지우고 사용자가 일반적인 IP 기반 필터로 복구할 수 있도록 하는 것이 더 좋다.
Cost of Validation
검증의 원가가 매우 낮을 수 있다.일반적으로 인증 요청의 인증 토큰을 어떤 방식으로든 검증하기를 원하지만, 인증 토큰은 사용자 ID와 같은 모든 방식의 속도 제한 설정을 검증하기 위해 충분한 정보를 제공합니다.그러나 정보 공개 요청에 대해 이런 검증은 다른 측면에서 불필요할 수 있고 서비스 요청의 전체 비용을 증가시킬 수 있다.
불행하게도 저는 어떤 좋은 해결 방안이 있는지 모르겠습니다. 이것은 신분 검증의 속도 제한을 바탕으로 하는 비용입니다. 당신은 실제로 신분 검증을 실행해야 합니다!하나의 해결 방법은 공공 데이터에 대한 요청을 속도 제한에서 배제함으로써 신분 검증 정보를 검증할 필요가 없다는 것이다.단, 속도 제한기와 응용 프로그램 사이에서 속도 제한을 뛰어넘는 요청이 사실상 무제한인지 확인하십시오. (공격자는 모든 요청에 무작위 속도 제한 키를 보낼 수 있기 때문입니다.)동기화를 유지하는 간단한 방법은 요청을 프로그램에 전달하기 전에 요청에서 속도 제한 키를 삭제하고 프로그램이 검증할 내용이 없다는 것이다.이러한 방법은 비용을 낮출 수 있지만, 프로그램이 스크레이퍼에 노출될 수 있기 때문에, 매우 높은 IP 기반 속도 제한을 사용하면 많은 합법적인 요청에 영향을 주지 않는 상황에서 가장 심각한 공격을 방지하기에 충분할 것이다.
Possible Tweaks
Key Passing
쿠키를 통해 속도 제한 정보를 전달하는 것은 간단한 옵션입니다. 브라우저가 모든 후속 요청에 자동으로 추가하지만, 기본적으로 URL 매개 변수나 사용자 정의 제목을 포함하여 모든 방법이 작동할 수 있기 때문입니다.다만 사용자를 밖으로 잠그는 것을 조심해야 한다.사용자 정의 방법으로 속도 제한 정보를 전달할 경우 모든 클라이언트가 속도 제한 정보가 일치하지 않아 거부된 요청을 정상적으로 처리할 수 있도록 해야 한다.
Variable Limits
만약 충분한 유연한 속도 제한 시스템이 있다면, 응용 데이터에 따라 속도 제한을 설정할 수도 있다.예를 들어 로그인한 사용자는 10r/s를 얻을 수 있지만 최소 20달러를 쓴 로그인한 사용자는 20r/s를 얻을 수 있다. 이것은 가장 충성스러운 고객에게 신뢰할 수 있는 서비스를 제공하는 동시에 계정 스팸메일의 유효성을 방지할 수 있는 좋은 방법이다.
Reference
이 문제에 관하여(사용자당 속도 제한), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kevincox/per-user-rate-limiting-32kf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)