Как загрузить данные пользователя django в форму редактирования пользователя в безопасной среде эскалации прав [закрыто]

Я пытаюсь создать форму редактирования профиля в django для пользователей таким образом, чтобы они не могли установить себя в качестве суперпользователя или сотрудника. Это мой первый учебный проект в django и пока что я следовал https://docs.djangoproject.com/en/4.1/topics/forms/ для настройки всего.

в файле views.py

@login_required    
def edit_profile(request):
    user = request.user
    if request.method == 'POST':
        form = edit_profile_form(request.POST)
        if form.is_valid():
            
            if user.is_authenticated:
                try:
                    user.first_name = form.cleaned_data['firstname']
                    user.last_name = form.cleaned_data['lastname']
                    user.email = form.cleaned_data['email']
                    user.username = form.cleaned_data['username']
                    user.save()
                except Exception as e:
                    return HttpResponse(e)
            return render(request, 'index.html')
    else:
        #Get data ready for form
        data = {'firstname': user.first_name, 'lastname': user.last_name, 'email': user.email, 'username': user.username}
        form = edit_profile_form(data)

    return render(request, 'edit_profile.html', {'form': form} )

в файле forms.py

from django import forms

class edit_profile_form(forms.Form):
  firstname = forms.CharField(label='First name', max_length=100,)
  lastname = forms.CharField(label='Last name', max_length=100)
  email = forms.EmailField(label='Email', max_length=100)
  username = forms.CharField(label='Username', max_length=150)
  
  def __init__(self,  *args, **kwargs):
    data = kwargs.get('data', None)
    super(edit_profile_form, self).__init__(*args, **kwargs)
    if data:
      self.fields['firstname'].initial = data['firstname']
      self.fields['lastname'].initial = data['lastname']
      self.fields['email'].initial = data['email']
      self.fields['username'].initial = data['username']

в edit_profile.html

{% extends 'base.html' %}{% load static %} {% block content %}

<link href="{% static 'css/edit_profile.css' %}" rel="stylesheet" />
<main class="profile">
  <form method='POST'>
    {% csrf_token %}
    <h1> Profile editor </h1>
    {{ form }}
    <input type='submit' value='Submit' class='btn btn-primary'>
  </form>
</main>

{%endblock%}

Редактирование_профиля.html загружается только если пользователь аутентифицирован, это проверяется в base.html. Блок try-catch в представлениях можно пока игнорировать, он нужен только для отладки, а исключения я буду обрабатывать другим способом.

Проблемы :

  1. Безопасно ли то, что я использую сейчас, от вредоносных POST-атак?
  2. Есть ли способ убедиться, что это не приведет к повышению прав пользователей?
  3. Нужно ли мне использовать совершенно другой способ, чтобы пользователи редактировали свои профили?

Если я использую такие методы, как https://www.youtube.com/watch?v=R6-pB5PAA6s, то пользователи могут просто позволить себе получить разрешения.

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