Как загрузить данные пользователя 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 в представлениях можно пока игнорировать, он нужен только для отладки, а исключения я буду обрабатывать другим способом.
Проблемы :
- Безопасно ли то, что я использую сейчас, от вредоносных POST-атак?
- Есть ли способ убедиться, что это не приведет к повышению прав пользователей?
- Нужно ли мне использовать совершенно другой способ, чтобы пользователи редактировали свои профили?
Если я использую такие методы, как https://www.youtube.com/watch?v=R6-pB5PAA6s, то пользователи могут просто позволить себе получить разрешения.