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
зависит от вашего случая использования, и вы должны подумать об этом.