Guice 및 Sitebricks으로 동적 속도 제한을 만드는 것은 매우 간단합니다. Using method interceptors, 서블릿 당 IP 주소 당 요청 수를 계산할 수 있습니다. 이러한 카운터는 memcache에 저장되어 자신의 규칙에 따라 요청을 빠르게 실패 할 수 있습니다. 그것들은 완전히 특정 응용 분야 일 수 있습니다.
@Service
class Servlet {
@Get
@At("/your/servlet")
@IpRateLimited
public Reply<?> foo(Request request) {
return Reply.with("Hello World");
}
}
class IpBasedRateLimiter implements MethodInterceptor {
public Object invoke(final MethodInvocation invocation) throws Throwable {
// Inspect the request argument on the invoked method to get the IP address
if (isDenialOfServiceAttempt(invocation)) {
// Fail the request
return Reply.saying().error();
} else {
// Continue executing the original request
return invocation.proceed();
}
}
}
...
bindInterceptor(Matchers.any(), Matchers.annotatedWith(IpRateLimited.class),
new IpBasedRateLimiter());
...
DOS 시도를 감지하는 데 사용 된 CPU 시간은 여전히 지불해야합니다. 그러나 알고리즘이 충분히 공격적이면이 비용은 최소가됩니다. 하나의 memcache가 조건을 얻고 검사합니다. 이것은 GAE가 자신의 동적 DOS 보호 기능을 제공 할 때까지 내가 할 것입니다.
FWIW, 새로 출시 된 [GAE 방화벽] (https://cloud.google.com/appengine/docs/standard/python/application-security#app_engine_firewall)에는 많은 규칙 제한이없는 것 같습니다. –