diff options
author | Maksim Pechnikov <parallel588@gmail.com> | 2020-10-27 22:58:55 +0300 |
---|---|---|
committer | Maksim Pechnikov <parallel588@gmail.com> | 2020-10-27 22:59:27 +0300 |
commit | d28f72a55af9442719ff01fe7052802c285f6ea8 (patch) | |
tree | 70fada318f011b4595a285d19071841d9004bc83 /lib | |
parent | 5aff4799515c141cb0a42686733b2f40faba6f86 (diff) | |
download | pleroma-d28f72a55af9442719ff01fe7052802c285f6ea8.tar.gz pleroma-d28f72a55af9442719ff01fe7052802c285f6ea8.zip |
FrontStatic plug: excluded invalid url
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/plugs/frontend_static.ex | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/lib/pleroma/web/plugs/frontend_static.ex b/lib/pleroma/web/plugs/frontend_static.ex index ceb10dcf8..1b0b36813 100644 --- a/lib/pleroma/web/plugs/frontend_static.ex +++ b/lib/pleroma/web/plugs/frontend_static.ex @@ -34,22 +34,26 @@ defmodule Pleroma.Web.Plugs.FrontendStatic do end def call(conn, opts) do - frontend_type = Map.get(opts, :frontend_type, :primary) - path = file_path("", frontend_type) - - if path do - conn - |> call_static(opts, path) + with false <- invalid_path?(conn.path_info), + frontend_type <- Map.get(opts, :frontend_type, :primary), + path when not is_nil(path) <- file_path("", frontend_type) do + call_static(conn, opts, path) else - conn + _ -> + conn end end - defp call_static(conn, opts, from) do - opts = - opts - |> Map.put(:from, from) + defp invalid_path?(list) do + invalid_path?(list, :binary.compile_pattern(["/", "\\", ":", "\0"])) + end + defp invalid_path?([h | _], _match) when h in [".", "..", ""], do: true + defp invalid_path?([h | t], match), do: String.contains?(h, match) or invalid_path?(t) + defp invalid_path?([], _match), do: false + + defp call_static(conn, opts, from) do + opts = Map.put(opts, :from, from) Plug.Static.call(conn, opts) end end |