Django - ссылки, сгенерированные с {% URL %} - как заставить их защитить?

Вот более универсальная версия решение .

Макета, Мы можем использовать отражение для достигания защищенного свойство DoubleBuffered , и затем это может быть установлено на верный .

Примечание : Вы должны платить свои налоги разработчика а не двойная буферизация использования, если пользователь будет работать на сессии служб удаленных рабочих столов (например, Удаленный рабочий стол), то Этот вспомогательный метод не включит двойную буферизацию, если человек будет работать в удаленном рабочем столе.

public static void SetDoubleBuffered(System.Windows.Forms.Control c)
{
   //Taxes: Remote Desktop Connection and painting
   //http://blogs.msdn.com/oldnewthing/archive/2006/01/03/508694.aspx
   if (System.Windows.Forms.SystemInformation.TerminalServerSession)
      return;

   System.Reflection.PropertyInfo aProp = 
         typeof(System.Windows.Forms.Control).GetProperty(
               "DoubleBuffered", 
               System.Reflection.BindingFlags.NonPublic | 
               System.Reflection.BindingFlags.Instance);

   aProp.SetValue(c, true, null); 
}

12
задан kender 23 November 2009 в 20:05
поделиться

3 ответа

Тег {% url%} генерирует только часть пути URL-адрес, а не часть хоста. Он генерирует только что-то вроде «/ path / to / here» (все, что вам нужно сделать, это «просмотреть исходный код», и вы увидите, что это все содержимое href ). Ваш браузер предполагает, что если вы в настоящее время находитесь на http://example.com , ссылка также должна находиться внутри http://example.com . Итак, все, что вам нужно сделать для создания защищенной ссылки в вашем шаблоне, это:

<a href="https://example.com{% url blah %}">

Если вы не хотите жестко кодировать доменное имя (а я бы не стал), вы можете использовать объект Site , и он будет выглядеть примерно так:

<a href="https://{{ site.domain }}{% url blah %}">

Или, если вы этого не сделаете хотите использовать структуру сайтов, вы можете использовать request.get_host :

<a href="https://{{ request.get_host }}{% url blah %}">
19
ответ дан 2 December 2019 в 06:08
поделиться

Я мало работал с защищенными URL-адресами, но немного поработал с satchmo, в котором есть промежуточное ПО и некоторые утилиты для него. Промежуточное ПО просто проверяет наличие ключа SSL = True в параметрах просмотра и таким образом обеспечивает безопасность запроса. Возможно, вам не нужно делать это настолько сложным, но вы можете взглянуть на то, как это реализовано.

Satchmo находится на битбаке здесь

Я также смог найти фрагменты для промежуточного программного обеспечения, которые также должны сможет помочь вам получить безопасный URL-адрес для входа:

Первый является оригиналом, в то время как вторая должна быть улучшенной версией в какой-то момент, но может быть уже не так. Вы можете взглянуть на них.

Используя satchmo или один из фрагментов промежуточного программного обеспечения, вы должны иметь возможность делать что-то вроде

{% url login_page %}
{% url login_page SSL=1 %}
6
ответ дан 2 December 2019 в 06:08
поделиться

Возможно, вы могли бы написать тег url_https , который делает то же самое, что и url , но указывает на HTTPS-версию URL.

0
ответ дан 2 December 2019 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: