Request Size Limits (Abuse Prevention)
On this page
Large Requests Are a DoS Vector
If you do not enforce request size limits: - attackers can send huge bodies - memory usage spikes - request threads block - connection pools exhaust - application becomes unavailable Production rule: Every service must define explicit maximum request sizes.Real Production Incident
Symptoms: - API memory usage grows rapidly. - GC pressure spikes. - CPU increases. - No obvious spike in request count. Root cause: - Client (malicious or buggy) sent very large JSON payloads. - No request size limit enforced. - Model binding attempted to buffer entire body. - Server resources exhausted. This was not high RPS. It was large body size abuse.Symptom → Cause → Diagnosis → Fix
Symptom: - high memory usage - slow requests - OOM crashes - low request rate but heavy resource consumption Cause: - no MaxRequestBodySize - large file uploads without constraints - buffering entire body into memory - missing reverse proxy limits Diagnosis: - inspect request sizes in logs (if captured safely). - monitor memory allocation spikes. - review Kestrel and proxy config. - reproduce with large payload test. Fix: - set explicit request body size limits. - enforce per-endpoint limits (especially file uploads). - configure reverse proxy limits. - stream large uploads instead of buffering fully.Anti-Pattern: Unlimited Body Size
If you rely on defaults: - body size may be too large. - reverse proxy may allow large payloads. - app may buffer entire request. This becomes trivial DoS. Production rule: Never leave body size unlimited in public endpoints.Correct Pattern: Layered Size Limits
Enforce at multiple layers: 1) Reverse proxy (e.g., Nginx, ingress controller) 2) Kestrel server configuration 3) Endpoint-specific overrides Conceptual Kestrel configuration:
builder.WebHost.ConfigureKestrel(options =>
{
options.Limits.MaxRequestBodySize = 10 * 1024 * 1024; // 10 MB
});
For specific endpoint:
[RequestSizeLimit(5 * 1024 * 1024)]Production rule: File upload endpoints need explicit, intentional limits.