Django как защитить скрытые поля ввода и предотвратить отправку формы при изменении значения?

Я вывожу несколько данных в скрытый ввод. Пользователь может просмотреть html-страницу и увидеть эти скрытые данные. Он также может изменить данные скрытого ввода, что является одним из видов риска безопасности для моего сайта. Например, у меня есть скрытый ввод, где email и имя пользователя отображаются следующим образом

<input type="hidden" name="name" class="form-control" placeholder="Your Name" value="Jhone" required=""> 

Пользователь может проверить html и изменить значение, тогда мои формы отправляются с новым обновленным значением. есть ли способ остановить отправку форм, если значение изменено. вот мой код:

#html template

{% for i in currentuser_details %}
{%for y in user_profile%}
 <input type="hidden" name='userprofile' value="{{y.id}}">
{%endfor%}        
 <input type="hidden" name="name" class="form-control"  placeholder="Your Name"  value="{{i.first_name}}" required>
<input type="hidden" name="email" class="form-control" placeholder="Enter email"value="{{ i.email }}" required>
 {%endfor%}

#html скрытый ввод данных рендеринга

    <input type="hidden" name="name" class="form-control" placeholder="Your Name" value="Jhone" required=""> 
 <input type="hidden" name="email" class="form-control" placeholder="Your Name" value="Jhone@gmail.com" required=""> 
 %for y in user_profile%}
   <input type="hidden" name='userprofile' value="{{y.id}}">
 {%endfor%}        
  <input type="hidden" name="parent" id="parent_id" value="95">

Наиболее важные для меня поля userprofile и parent. Я хочу предотвратить отправку формы при изменении любого скрытого значения.

froms.py

class CommentFrom(forms.ModelForm):
      captcha = CaptchaField()
      
      class Meta:
          model = BlogComment
          fields = ['name','email','comment','parent','sno','blog','user','userprofile']

views.py

if request.method == "POST":
       if comment_form.is_valid():
                isinstance = comment_form.save(commit=False)
                
                if request.user.is_authenticated:
                   isinstance.user = request.user
                elif not request.user.is_authenticated:
                   User = get_user_model()
                   isinstance.user = User.objects.get(username='anonymous_user')
                
                isinstance.blog = blog
                isinstance.save()
                messages.add_message(request, messages.INFO, 'Your Comment Pending for admin approval')
                return redirect('blog:blog-detail',slug=blog.slug)
       else:
           messages.add_message(request, messages.INFO, "your comment didn't submitted. please submit again ")
                
    else:
          comment_form = CommentFrom()

это набор запросов профиля пользователя user_profile = UserProfile.objects.filter(user=request.user)

Вы можете использовать request.session. Я имею в виду, что перед рендерингом страницы вы можете установить значения следующим образом.

request.session['secret_data'] = {"key1": "value1", "key2": "value2"}

Затем вы можете создать функцию валидации, которая будет выполнять проверку данных формы и значений request.session['secret_data']. Если валидация окажется верной, вы можете сохранить данные, в противном случае выдайте любое сообщение, какое захотите.

def validate_hidden_values(request,**kwargs):
    original_data = request.session['secret_data']
    # Used **kwargs because i do not know what all the named variables you want to validate. You can get submitted data from **kwargs
    # run your validation checks
    # return True if all validation passes else return False at any point where validation fails

Не забудьте удалить ключ secret_data с помощью request.session.pop('secret_data'), если валидация True. Теперь удаление ключа secret_data при валидации False зависит от вашего случая использования, и вы должны подумать об этом.

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