Niedawno rozpocząłem pracę nad Django, a teraz moja aplikacja jest już prawie na ukończeniu i zacząłem zastanawiać się nad bezpieczeństwem i najlepszymi praktykami.Django Zobacz bezpieczeństwo i najlepsze praktyki
Mam widok, który generuje stronę i różne funkcje w poście strony żądań AJAX do poszczególnych widoków. Na przykład mam widok o nazwie show_employees i mogę usuwać i aktualizować pracowników, przekazując żądanie postu do widoków delete_employee i update_employee.
Włożyłam @login_required dekoratorów przed każdym z tych widoków, ponieważ nie chcę nikomu dostępu do nich bez uwierzytelniania. Czy to w porządku?
W widokach delete_employee i update_employee odpowiadam tylko na żądanie, jeśli jest to żądanie POST AJAX (uisng is_ajax()). Czy to w porządku?
Zwracam "sukces", gdy widok powiedzie się, wykonując to, co jest potrzebne, i błąd, gdy w moim formularzu występuje błąd sprawdzania poprawności, ale nadal nie obsługuję innych wyjątków. Jak mam to zrobić? Czy powinienem zwrócić standardową stronę 500 poprzez odpowiedź AJAX, taką jak this, zawijając widok blokiem try-except, aby obsłużyć wszystkie wyjątki?
Czy mogę coś jeszcze zrobić, aby zabezpieczyć mój widok?
Oto przykładowa kopalni:
@login_required
def add_site(request):
data = {}
if request.method == 'POST':
if request.is_ajax():
form = AddSiteForm(request.user, request.POST)
if form.is_valid():
site = form.save(commit=False)
site.user = request.user
site.save()
data['status'] = 'success'
data['html'] = render_to_string('site.html', locals(), context_instance=RequestContext(request))
return HttpResponse(simplejson.dumps(data), mimetype='application/json')
else:
data['status'] = 'error'
data['errors'] = {}
for field, error in form.errors.iteritems():
data['errors']['id_'+field] = strip_tags(unicode(error))
return HttpResponse(simplejson.dumps(data), mimetype='application/json')
Dziękuję.