Skip to content

Commit e305a04

Browse files
authored
Do not track external domains to prevent CWE-601 (#107)
1 parent e388f13 commit e305a04

File tree

2 files changed

+9
-3
lines changed

2 files changed

+9
-3
lines changed

emark/message.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,13 @@ def update_url_params(self, url, **params):
115115
if not self.uuid:
116116
return redirect_url
117117
site_url = self.get_site_url()
118+
119+
# ignore external links
120+
if (
121+
redirect_url_parts.netloc
122+
and redirect_url_parts.netloc != parse.urlparse(site_url).netloc
123+
):
124+
return redirect_url
118125
tracking_url = reverse("emark:email-click", kwargs={"pk": self.uuid})
119126
tracking_url = parse.urljoin(site_url, tracking_url)
120127
tracking_url_parts = parse.urlparse(tracking_url)

tests/test_message.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -359,12 +359,11 @@ def test_update_url_params__subdomain(self, settings, email_message):
359359
"https://test.example.com/?utm_source=foo",
360360
utm_medium="baz",
361361
)
362-
== "http://www.example.com/emark/12341234-1234-1234-1234-123412341234/"
363-
"click?url=https%3A%2F%2Ftest.example.com%2F%3Futm_medium%3Dbaz%26utm_source%3Dfoo"
362+
== "https://test.example.com/?utm_medium=baz&utm_source=foo"
364363
)
365364

366365
def test_update_url_params__external_resource(self, email_message):
367-
email_message._tracking_uuid = "12341234-1234-1234-1234-123412341234"
366+
email_message.uuid = "12341234-1234-1234-1234-123412341234"
368367
assert (
369368
email_message.update_url_params(
370369
"https://google.com/",

0 commit comments

Comments
 (0)