Securisé son application web
Hello !
J'ai parcouru Docstring pour essayé de trouver des formations ou explications sur les points à bien faire attention pour sécurisé son application Web. A moin que je sois passé a côté, auriez vous des pistes a m'indiqué pour que j'étudie cela ?
Merci d'avance !
Salut Yann !
On n'a pas encore de formation dédiée à la sécurité avec Django effectivement, pour une raison assez simple : le framework fait 99% du travail pour toi. Pour introduire des erreurs de sécurité, souvent il faut presque le vouloir, ou en tout cas sortir de l'utilisation du framework.
Par exemple avec les formulaires, si tu fais tout toi même, sans passer par le système de formulaire, sans utiliser le {% csrf_token %} (en utilisant csrf_exempt par exemple, donc avec une action volontaire de ta part).
Donc si tu respectes les standards et les bonnes pratiques proposées par Django, tu es déjà sur la bonne voie.
Par exemple, Django échappe automatiquement le contenu dans les templates pour éviter les attaques par injection de code (le fameux Cross Site Scripting, XSS). Donc si tu utilises {{ variable }} dans un template, Django s'assurera d'échapper tout code HTML potentiellement dangereux.
Pour le stockage des mots de passe pareil, Django utilise des algorithmes de hachage sécurisés pour les stocker. De même avec L'ORM de Django qui protège contre les attaques par injection SQL.
Donc là encore tu aurais des risques de sécurité si tu décidais de ne pas utiliser l'ORM de Django et de tout faire directement en SQL, de stocker les mots de passe directement en les sauvegardant dans la BDD sans passer par les fonctions que je montre pour enregistrer un mot de passe quand tu crées un compte utilisateur, etc.
Pour que ça soit un peu plus clair je vais te donner un exemple de vulnérabilité classique que tu pourrais introduire en retournant directement du HTML dans ta réponse sans passer par le langage de template :
Imagine que tu as une vue qui prend une entrée utilisateur et la renvoie directement comme HTML:
from django.http import HttpResponse
def unsafe_view(request):
user_input = request.GET.get("user_input", "")
return HttpResponse(f"<div>{user_input}</div>")
Dans cet exemple, si un utilisateur entre quelque chose comme <script>alert('Hacked!');</script>, ce script sera exécuté pour quiconque visite la page. C'est une attaque XSS typique.
Voilà, j'espère que ça répond à tes interrogations :) C'est plus un sujet général de sécurité sur le web du coup que spécifiquement Django.
Merci pour tes réponses !
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte