Рассмотрим следующий код в шаблоне Django:
<a href='{{target}}'>Link text</a>
или
<a href="{{target}}">Link text</a>
Если элемент контекста target
содержит символы кавычек или двойные кавычки ('
или "
), то я ожидаю, что HTML-страница будет разрываться как минимум. Или кто-то может вставить JavaScript после закрытия кавычек / двойных кавычек, чтобы запускать произвольный код на клиентских машинах.
Как избежать URL в таких случаях?
Я пробовал
<a href='{{target|urlencode}}'>Link text</a>
Но проблема с этим подходом состоит в том, что URL перестает вести к исходному сайту, например http://www.example.com
, но начинает вести на мой сайт с http://www.example.com
, который рассматривается как путь после имени домена, то есть он становится http://127.0.0.1:8000/http%3A//www.example.com
.
Так что вы можете сказать мне правильный подход, чтобы сделать URL-адреса безопасными?
ОБНОВЛЕНИЕ: я только что понял, что мой пример слишком упрощен. Вот как я использую элемент контекста, если более подробно:
<a href="javascript:{}"
onclick="return recordTarget({{ target.perm_id }}, '{{ target.link }}')">
{{ target.title }}</a>
Так что я уже использую одинарные и двойные кавычки в HTML. target.link
передается в виде строки функции JavaScript.
Как я могу изменить свой код, чтобы он был безопасным и работающим, если URL содержит одинарные или двойные кавычки?