Действительно ли безопасно представить созданные пользователями шаблоны Django?

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

hey, my name is {{name}}.

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

P.S.

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

7
задан Community 23 May 2017 в 11:58
поделиться

3 ответа

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

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

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

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

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

5
ответ дан 6 December 2019 в 21:13
поделиться

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

3
ответ дан 6 December 2019 в 21:13
поделиться

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

4
ответ дан 6 December 2019 в 21:13
поделиться
Другие вопросы по тегам:

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