如果从未提交隐藏输入字段的值,那么使用隐藏输入字段是否安全?

问题描述 投票:0回答:1

我正在学习 Django 教程,有时需要访问 javascript 文件中的模板变量

{{ totalPrice }}
(购物车中的商品总和)。该值至关重要,因为在 javacript 处理该值之前,用户不应该能够降低该值。

结构是这样的。

  • checkout.html:显示

    {{ totalPrice }}
    的模板 HTML 文件,该值由 Django 视图计算并通过 Django 视图传入。

  • checkout.js:该文件中的代码需要

    {{ totalPrice }}
    的值。

建议的解决方案(通过教程)如下。

{{ totalPrice }}
被放入隐藏(引导程序
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' }}
    。在价值不被破坏的场景下安全吗?
javascript django security
1个回答
0
投票

据我了解,您使用

{{ totalPrice }}
变量仅用于显示目的,因此根据信息,我认为您没有安全问题。

即使您确实提交了

{{ totalPrice }}
,假设我们正在讨论购物车,该值也应该在后端计算和验证。

© www.soinside.com 2019 - 2024. All rights reserved.