Как создать безопасный URL в Django? - PullRequest
0 голосов
/ 15 января 2019

Рассмотрим следующий код в шаблоне 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 содержит одинарные или двойные кавычки?

...