aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaelwenn (lanodan) Monnier <contact@hacktivis.me>2020-03-15 15:45:57 +0100
committerHaelwenn (lanodan) Monnier <contact@hacktivis.me>2020-03-15 20:44:04 +0100
commit0ac6e296549f43e553bdd2350050efcf95d3b6fa (patch)
treece1668ebf3704803b370402911a308e90e71c9b2
parentfa4ec17c841a65eccacdc35c98b6c047549b305b (diff)
downloadpleroma-0ac6e296549f43e553bdd2350050efcf95d3b6fa.tar.gz
static_fe: Sanitize HTML in posts
Note: Seems to have different sanitization with TwitterCard generator giving the following: <meta content=\"“alert(&#39;xss&#39;)”\" property=\"twitter:description\">
-rw-r--r--lib/pleroma/web/static_fe/static_fe_controller.ex9
-rw-r--r--test/web/static_fe/static_fe_controller_test.exs13
2 files changed, 21 insertions, 1 deletions
diff --git a/lib/pleroma/web/static_fe/static_fe_controller.ex b/lib/pleroma/web/static_fe/static_fe_controller.ex
index 5027d5c23..0b77f949c 100644
--- a/lib/pleroma/web/static_fe/static_fe_controller.ex
+++ b/lib/pleroma/web/static_fe/static_fe_controller.ex
@@ -58,10 +58,17 @@ defmodule Pleroma.Web.StaticFE.StaticFEController do
_ -> data["url"] || data["external_url"] || data["id"]
end
+ content =
+ if data["content"] do
+ Pleroma.HTML.filter_tags(data["content"])
+ else
+ nil
+ end
+
%{
user: user,
title: get_title(activity.object),
- content: data["content"] || nil,
+ content: content,
attachment: data["attachment"],
link: link,
published: data["published"],
diff --git a/test/web/static_fe/static_fe_controller_test.exs b/test/web/static_fe/static_fe_controller_test.exs
index a072cc78f..c3d2ae3b4 100644
--- a/test/web/static_fe/static_fe_controller_test.exs
+++ b/test/web/static_fe/static_fe_controller_test.exs
@@ -92,6 +92,19 @@ defmodule Pleroma.Web.StaticFE.StaticFEControllerTest do
assert html =~ "testing a thing!"
end
+ test "filters HTML tags", %{conn: conn} do
+ user = insert(:user)
+ {:ok, activity} = CommonAPI.post(user, %{"status" => "<script>alert('xss')</script>"})
+
+ conn =
+ conn
+ |> put_req_header("accept", "text/html")
+ |> get("/notice/#{activity.id}")
+
+ html = html_response(conn, 200)
+ assert html =~ ~s[&lt;script&gt;alert(&#39;xss&#39;)&lt;/script&gt;]
+ end
+
test "shows the whole thread", %{conn: conn, user: user} do
{:ok, activity} = CommonAPI.post(user, %{"status" => "space: the final frontier"})