【问题标题】:flask hidden input field with csrf_token is visible in elements pane带有 csrf_token 的烧瓶隐藏输入字段在元素窗格中可见
【发布时间】:2021-09-18 04:46:18
【问题描述】:

我正在制作一个烧瓶应用程序,我有点业余,尤其是在安全方面。我使用

在我的终端中创建了一个密钥
os.urandom(24)

然后我将生成的密钥放在单独的配置文件中。

config.py
import os
class Config(object):
    SECRET_KEY= os.environ.get('SECRET_KEY') or '\x01\x14#\x15\xf7\x90\xc8\xdd\x99Q}b\x82~[v'

我已经构建了一个发布数据的表单,并添加了一个隐藏的输入字段,该字段包含一个带有 flask_wtf 和 wtforms 的密钥。我按照说明操作,输入字段确实是隐藏的,里面有一个键。所有的笨拙的多莉。在几篇文章中,我看到完全相同的输入和输出,所以我想没关系。但是带有密钥的输入字段在元素的窗格中是可见的。只需要打开开发工具就可以看到它坐在那里。那安全吗?密钥不应该被深深地隐藏起来吗?这真的如何运作?还是我做错了什么?

<form action="" method="post"  >
        {{ form.hidden_tag() }}
</form>

这会产生

<form actions="" method="post">
   <input id="csrf_token" name="csrf_token" type="hidden" value="IjkyODk2NDQ5Y2I5ZTM1NWIzMGIwMjg3ODhkMDVkZjU2OTNlOGM1Nzki.YOXJcg.xepMZGrYqvcwSnXtnzGl31UhASk">
</form>

谢谢

【问题讨论】:

    标签: flask input csrf


    【解决方案1】:

    是的,这就是它应该的样子。密钥存在于隐藏字段中,但也存在于用户的会话中(每个用户唯一)。因此,当用户提交表单时,该隐藏字段的值将与会话中相同字段的值进行比较。如果不匹配,提交将被拒绝。

    【讨论】:

    • 对,而且session的数据是安全的保存在服务器上,不能乱来。感谢您的快速答复。
    • 不客气。我相信默认情况下会话不在服务器上,而是在客户端上的加密 cookie 中。服务器上有一个用于解密这些数据的密钥。
    • 很高兴知道,我注意到每次刷新页面时密钥的值都会发生变化,所以我认为这是因为服务器上的密钥每次都在加密该 cookie。
    猜你喜欢
    • 2012-03-04
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多