diff options
author | Lain Soykaf <lain@lain.com> | 2025-03-11 14:18:36 +0400 |
---|---|---|
committer | Lain Soykaf <lain@lain.com> | 2025-03-11 14:18:36 +0400 |
commit | c14365336411f43f0e9eea00bc1c8242620220f1 (patch) | |
tree | 1b4042c267f40385a3b1e0beead53707723f9901 /lib | |
parent | d9ae9b676c2963466cbb8e440711db1759e25c31 (diff) | |
download | pleroma-c14365336411f43f0e9eea00bc1c8242620220f1.tar.gz pleroma-c14365336411f43f0e9eea00bc1c8242620220f1.zip |
ReverseProxy: Sanitize content.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/reverse_proxy.ex | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/pleroma/reverse_proxy.ex b/lib/pleroma/reverse_proxy.ex index 8aec4ae58..3c82f9996 100644 --- a/lib/pleroma/reverse_proxy.ex +++ b/lib/pleroma/reverse_proxy.ex @@ -17,6 +17,8 @@ defmodule Pleroma.ReverseProxy do @failed_request_ttl :timer.seconds(60) @methods ~w(GET HEAD) + @allowed_mime_types Pleroma.Config.get([Pleroma.Upload, :allowed_mime_types], []) + @cachex Pleroma.Config.get([:cachex, :provider], Cachex) def max_read_duration_default, do: @max_read_duration @@ -301,10 +303,26 @@ defmodule Pleroma.ReverseProxy do headers |> Enum.filter(fn {k, _} -> k in @keep_resp_headers end) |> build_resp_cache_headers(opts) + |> sanitise_content_type() |> build_resp_content_disposition_header(opts) |> Keyword.merge(Keyword.get(opts, :resp_headers, [])) end + defp sanitise_content_type(headers) do + original_ct = get_content_type(headers) + + safe_ct = + Pleroma.Web.Plugs.Utils.get_safe_mime_type( + %{allowed_mime_types: @allowed_mime_types}, + original_ct + ) + + [ + {"content-type", safe_ct} + | Enum.filter(headers, fn {k, _v} -> k != "content-type" end) + ] + end + defp build_resp_cache_headers(headers, _opts) do has_cache? = Enum.any?(headers, fn {k, _} -> k in @resp_cache_headers end) |