Django Рендеринг форм вручную и использование токена csfr - PullRequest
2 голосов
/ 02 мая 2020

Мне кажется, я постепенно осваиваю Django, но я относительно новичок и самоучка в программировании. Я использовал form.as_p и form_ul в шаблонах, но хотел получить лучшее понимание того, как заставить их выглядеть лучше. Я посмотрел документацию Django о том, как вручную обрабатывать формы. Кажется, это работает как рекламируется, и я могу показать отдельные поля и т. Д. c. на моей html странице. Однако в документации это подчеркивается:

Защита от подделки форм и межсайтовых запросов Django поставляется с простой в использовании защитой от подделок межсайтовых запросов. При отправке формы через POST с включенной защитой CSRF необходимо использовать тег шаблона csrf_token, как в предыдущем примере. Тем не менее, поскольку защита CSRF не связана напрямую с формами в шаблонах, этот тег опущен в следующих примерах в этом документе.

Не думаю, что я понимаю, что подразумевается под последней строкой. Я предполагаю, что это означает, что я могу обработать форму все, что я хочу, но если нет запроса Post, мне не нужен токен CSRF.

Есть ли пример того, как вручную обрабатывать формы с помощью post запросы и токены CSRF?

Я также предполагаю, что когда я пишу формы в html, так как они не взаимодействуют с моделью и базой данных, что CSRF не требуется? Это потому, что уязвимость, вызывающая озабоченность, обычно вносит что-то нежелательное в базу данных?

Я просмотрел некоторую другую документацию Django CSRF и немного подумал о том, как промежуточное программное обеспечение необходимо для реализации защиты CSRF, но я думаю, что оно требует более подробных базовых знаний, чем у меня , Любые предложения о том, что можно почитать, чтобы узнать больше, чтобы лучше понять POST и CSRF, и я думаю, что cookie et c.

1 Ответ

2 голосов
/ 02 мая 2020

Я предполагаю, что это означает, что я могу обработать форму все, что я хочу, но если нет запроса Post, мне не нужен токен CSRF.

Да, CSRF токен необходим для запросов PUT и POST. Это не требуется для запросов GET. Но вы не должны использовать GET для отправки данных формы.

Маркер CSRF не является свойством форм. Этот токен используется приложением для проверки запросов, поступающих от клиента.

Есть ли пример того, как вручную обрабатывать формы с почтовыми запросами и токенами CSRF?

Как объяснено в документах , это довольно просто.

<form action="{% url "submit-form-url-name" %}" method="post" accept-charset="utf-8">
    {% csrf_token %}
    {{ form.field1 }}
    {{ form.field2 }}
    ...
</form>

Это потому, что уязвимость, вызывающая озабоченность, обычно вносит что-то нежелательное в базу данных?

CSRF-токен генерируется на стороне сервера. Он прикреплен к сеансу пользователя и используется для проверки пользовательских запросов. Если пользователь отправляет некоторые данные формы на сервер с целью сохранения этих данных в базе данных / файле / кэше, рекомендуется проверить, действительно ли этот запрос поступает только от действительного пользователя.

... получил представление о том, как промежуточное программное обеспечение необходимо для реализации защиты CSRF ...

Django предоставляет промежуточное программное обеспечение CSRF по умолчанию, его довольно легко настроить, и use.
Обратите внимание, что CSRF больше не является проблемой безопасности OW ASP top 10. Раньше было хоть раньше.

...