CommonAPI: Escape HTML for chat messages.
authorlain <lain@soykaf.club>
Thu, 16 Apr 2020 10:56:29 +0000 (12:56 +0200)
committerlain <lain@soykaf.club>
Thu, 16 Apr 2020 10:56:29 +0000 (12:56 +0200)
lib/pleroma/web/common_api/common_api.ex
test/web/common_api/common_api_test.exs

index c306c1e96c8086411cbd376624e8b16162a6bdee..2c25850db4cfb9a20e1b69c4deb2a3a1860b6b93 100644 (file)
@@ -17,6 +17,7 @@ defmodule Pleroma.Web.CommonAPI do
   alias Pleroma.Web.ActivityPub.Pipeline
   alias Pleroma.Web.ActivityPub.Utils
   alias Pleroma.Web.ActivityPub.Visibility
+  alias Pleroma.Formatter
 
   import Pleroma.Web.Gettext
   import Pleroma.Web.CommonAPI.Utils
@@ -28,7 +29,12 @@ defmodule Pleroma.Web.CommonAPI do
     transaction =
       Repo.transaction(fn ->
         with {_, {:ok, chat_message_data, _meta}} <-
-               {:build_object, Builder.chat_message(user, recipient.ap_id, content)},
+               {:build_object,
+                Builder.chat_message(
+                  user,
+                  recipient.ap_id,
+                  content |> Formatter.html_escape("text/plain")
+                )},
              {_, {:ok, chat_message_object}} <-
                {:create_object, Object.create(chat_message_data)},
              {_, {:ok, create_activity_data, _meta}} <-
index 168721c81f54f67abccf4e46b66b01bfbc615f0b..abe3e6f8d6e91c5515d10fbd1f5a77aa9372822b 100644 (file)
@@ -27,7 +27,12 @@ defmodule Pleroma.Web.CommonAPITest do
       author = insert(:user)
       recipient = insert(:user)
 
-      {:ok, activity} = CommonAPI.post_chat_message(author, recipient, "a test message")
+      {:ok, activity} =
+        CommonAPI.post_chat_message(
+          author,
+          recipient,
+          "a test message <script>alert('uuu')</script>"
+        )
 
       assert activity.data["type"] == "Create"
       assert activity.local
@@ -35,7 +40,9 @@ defmodule Pleroma.Web.CommonAPITest do
 
       assert object.data["type"] == "ChatMessage"
       assert object.data["to"] == [recipient.ap_id]
-      assert object.data["content"] == "a test message"
+
+      assert object.data["content"] ==
+               "a test message &lt;script&gt;alert(&#39;uuu&#39;)&lt;/script&gt;"
 
       assert Chat.get(author.id, recipient.ap_id)
       assert Chat.get(recipient.id, author.ap_id)