diff --git a/articles/imagesharp/security.md b/articles/imagesharp/security.md new file mode 100644 index 000000000..19b0ab9c0 --- /dev/null +++ b/articles/imagesharp/security.md @@ -0,0 +1,19 @@ +# Security Considerations + +Image processing is a memory-intensive application. Most image processing libraries (including ImageSharp, SkiaSharp, and Magick.NET) decode images into in-memory buffers for further processing. Without additional measures, any publicly facing service that consumes images coming from untrusted sources might be vulnerable to DoS attacks attempting to deplete process memory. + +Such measures can be: +- Authentication, for example by using HMAC. See [Securing Processing Commands in ImageSharp.Web](../imagesharp.web/processingcommands.md#securing-processing-commands). +- Offloading to separate services/containers. +- Placing the solution behind a reverse proxy. +- Rate Limiting. +- Imposing conservative allocation limits by configuring a custom `MemoryAllocator`: + +```csharp +Configuration.Default.MemoryAllocator = MemoryAllocator.Create(new MemoryAllocatorOptions() +{ + // Note that this limits the maximum image size to 64 megapixels of Rgba32. + // Any attempt to create a larger image will throw. + AllocationLimitMegabytes = 256 +}); +``` \ No newline at end of file diff --git a/articles/toc.md b/articles/toc.md index 1c841d616..c06e9970b 100644 --- a/articles/toc.md +++ b/articles/toc.md @@ -8,6 +8,7 @@ ### [Working with Pixel Buffers](imagesharp/pixelbuffers.md) ### [Configuration](imagesharp/configuration.md) ### [Memory Management](imagesharp/memorymanagement.md) +### [Security Considerations](imagesharp/security.md) # [ImageSharp.Drawing](imagesharp.drawing/index.md) ## [Getting Started](imagesharp.drawing/gettingstarted.md)