Безопасно ли использование скрытого поля ввода, если его значение никогда не будет отправлено?

Я изучаю учебник по Django, и в какой-то момент возникла необходимость получить доступ к переменной шаблона {{ totalPrice }} (сумма товаров в корзине) в файле javascript. Это значение является критическим в том смысле, что пользователь не должен иметь возможности понизить его до того, как оно будет обработано яваскриптом.

Структура выглядит следующим образом.

  • checkout.html: Шаблонный HTML-файл, который отображает {{ totalPrice }}, значение, вычисляемое и передаваемое через представление Django.

  • checkout.js: Код в этом файле нуждается в значении {{ totalPrice }}.

Предлагаемое решение (в учебнике) выглядит следующим образом.

{{ totalPrice }} помещается в скрытое (bootstrap class="d-none") поле ввода. Поле не является частью формы и не может быть отправлено.

<input type="number" class="d-none" id="totalPrice" value={{ totalPrice }}>

Затем доступ к нему осуществляется в checkout.js следующим образом.

let totalPrice = document.getElementById('totalPrice').value

У меня есть несколько вопросов по поводу этого подхода.

  1. Согласно моим исследованиям, использование скрытых полей ввода таким образом небезопасно (source1 source2). В первом источнике фактически говорится о том же самом сценарии, где хранится цена. <<<Однако разница в том, что в моем сценарии поле ввода не является частью формы и поэтому не отправляется. Безопасен ли подход в этом случае?
  2. Более современный подход в Django, кажется, использует {{ totalPrice|json_script:'totalPrice' }}. Безопасно ли это в сценарии, где значение не должно быть изменено?

Насколько я понимаю, вы используете переменную {{ totalPrice }} только для отображения, поэтому, учитывая эту информацию, я не думаю, что у вас есть проблемы с безопасностью.

Даже если вы отправили {{ totalPrice }}, если мы говорим о корзине, значение должно быть рассчитано и подтверждено в бэкенде.

Вернуться на верх