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