【问题标题】:Django: forms how to safe gaurd hidden fields from any malicious user modifyingDjango:形成如何保护隐藏字段免受任何恶意用户修改
【发布时间】:2019-09-15 02:01:19
【问题描述】:

我希望我的用户通过 OTP 登录。

所以他会填写 EmailForm 并点击按钮 sendotp

forms.py

class EmailForm(forms.Form):
    email = forms.EmailField(help_text='Please Enter valid Email Address', label='Email address', max_length=254)

然后在我的views.py中我将保存电子邮件并生成一个OTP并保存它,然后使用send_email发送OTP

之后,它将使用 OTPForm 打开一个新模板,并隐藏电子邮件。

views.py

form= OTPForm(initial={'email': userfilled_email}
return render (request, 'template2',{'form':form})

forms.py

class OTPForm(forms.Form):
    email = forms.EmailField(widget=forms.HiddenInput())
    otp = forms.CharField(widget=forms.HiddenInput(),help_text='Please Enter valid OTP sent to your Email', label='Otp', max_length=6)

我想隐藏电子邮件。提交表单后,我将需要电子邮件,以便我可以验证发送到邮件的 otp 和用户输入的 otp。

我听说有些恶意用户会在你不希望他们修改隐藏字段时尝试修改它。

那么从这种情况中拯救的最佳方法是什么。

【问题讨论】:

  • 您无法阻止用户修改隐藏的输入。
  • 这封电子邮件是否来自某个地方?

标签: django django-forms


【解决方案1】:

您不能阻止用户修改输入。但是,既然您将电子邮件放入视图中的表单中,为什么不能在下一个视图中验证电子邮件是否相同?为什么不能以这种方式检测到恶意输入?

【讨论】:

    【解决方案2】:

    我发现我使用隐藏字段的方法并不安全。我发现我可以使用 session 将电子邮件传递给我的下一个视图。

    def view1(request):     
         # get email from form and check for form.is_valid():
         email = form.cleaned_data.get('email')
         # then
         request.session['email'] = email
         # render ...........
    
    def view2(request):
        if 'email' in request.session:
             email = request.session['email']
    

    【讨论】:

      猜你喜欢
      • 2015-11-05
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      • 2013-01-22
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多