Безопасно ли отображать созданные пользователем шаблоны Django? - PullRequest
7 голосов
/ 23 февраля 2010

Безопасно ли разрешать пользователям создавать свои собственные шаблоны Django с набором предопределенных переменных, а затем отображать этот шаблон на сервере? Я бы только передал очень ограниченный набор параметров в render, все из которых являются строками. Шаблоны будут примерно такими:

hey, my name is {{name}}.

Итак, вопрос в том, существуют ли какие-либо теги шаблонов django, которыми можно злоупотреблять для получения информации, которую пользователи не должны получать? Больше всего меня беспокоит тег {% url %}.

приписка

Я заметил этот вопрос после заполнения названия, однако, мой вопрос немного отличается. Я, вероятно, вообще не позволю HTML / javascript, использую Textile / Markdown или найду способ ограничить HTML базовым набором тегов.

Ответы [ 3 ]

5 голосов
/ 24 февраля 2010

Существует три основных риска:

  1. Пользователи, изменяющие данные. Например, рендеринг {{ request.user.kill }} вызовет kill() вызов во время поиска значения. Чтобы предотвратить это, вы должны установить kill.alters_data = True в коде вашей модели. Все встроенные методы модели, которые модифицируют данные, уже помечены, поэтому риск связан только с вашими собственными методами или методами, предоставляемыми плохо написанными сторонними приложениями.

  2. Пользователи, имеющие прямой доступ к данным, они не должны видеть. Когда используется RequestContext (что происходит чаще всего), в контекст рендеринга шаблона добавляется много переменных. Добавьте пользовательские шаблоны, и вы получите довольно опасную смесь, потому что пользователь может просматривать все, что добавлено любым контекстным процессором.

  3. Пользователи, имеющие доступ к данным, не должны видеть их через отношения. Когда вы передаете экземпляр модели в шаблон, его отношения могут передаваться дальше, чем вы ожидаете: {{ current_user.corporate_account.owner.ssn }} Упс ... Хорошей превентивной мерой будет тщательный анализ ваших модельных отношений, чтобы убедиться, что вы не раскрываете что-то чувствительное.

В целом, я бы сказал, что это безопасно, если вы осведомлены о рисках выше и выводите предоставленные пользователем строки отдельно от обычных шаблонов. И убедитесь, что вы явно запрещаете {% debug %}, {% include %}. {% ssi %} теги шаблонов, так как они могут выдавать довольно конфиденциальную информацию. Может быть, вы можете проигнорировать это, разрешив только переменные и фильтры и вообще запретив контрольные теги.

4 голосов
/ 23 февраля 2010

include и ssi выглядит слишком опасно на мой вкус, особенно ssi, который использует абсолютные пути. Мое мнение таково, что это слишком рискованный бизнес.

3 голосов
/ 23 февраля 2010

Что ж, с точки зрения сервера это безопасно (возможно, никто никогда не проверял это), однако пользователи, очевидно, могли генерировать любой Javascript, который они хотели бы выполнять XSS-атаки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...