Django et la securite

a marqué ce sujet comme résolu.

Bonjour a tous !

Je suis en train de développer un site web avec Django, je le présenterai peut-être un jour sur ce forum.

Mais avant de présenter un site au public, il faut le sécuriser ! J'avoue ne pas trop m'y connaître sur ce sujet, et je viens donc demander votre aide. En plus, les dev de ce (fabuleux) site doivent commencer a connaître ce (fabuleux) framework, et avoir déjà fait tout ce processus de sécurisation.

Les failles de sécurité web

Les failles que je connais :

  • Les XSS : normalement, pas avec Django, je n'utilise que des requêtes via l'ORM.
  • Les CSRF : j'ai mis le joli csrf_token dans tous mes formulaires, mais je ne sais comment tester si la protection est effective. Vous auriez un lien sur le sujet ?

Connaissez-vous d'autres failles de sécurité courante pour un site web que j'aurais pu manquer ? Il y aura bien sur les failles spécifique a l'application, mais il sera bien plus complique de me conseiller la-dessus.

Au passage, j'ai découvert que LaTeX exposait de belles failles de sécurité : cet article explique comment créer un virus JS sur Windows, et lire les infos système sur Linux.

Les failles du serveur

Pour le moment, je fait tourner une version beta sur un serveur avec nginx + uwsgi + Django. Je n'y connaît pas grand chose non plus en administration système, donc la encore, tous liens ou retours d’expérience sont les bienvenus !

A protéger, je vois principalement l’accès ssh, avec interdiction de login root et failtoban. Auriez-vous d'autres logiciels a me conseiller ?

HS : il est ou le champ pour les tags de sujets de forum ? C'est le staff qui gère, ou les posteurs ?

+0 -0

Les XSS : normalement, pas avec Django, je n'utilise que des requêtes via l'ORM.

Je pense que tu confonds un peu deux failles. Les failles XSS (Cross-site scripting) sont habituellement exploitées par un pirate qui passe du code à un site web qui le transmet aux autres clients sans l'échapper, et qui est exécuté par la victime. Par exemple, si j'écrivais alert("je suis un super hacker") et que tu voyais une pop-up s'afficher chez toi, cela voudrait dire que Zeste de Savoir est vulnérable à ce type de faille.

Ta description s'approche plutôt des injections SQL : un pirate envoie une chaîne de caractère spécifique au site web, celui-ci ne la sécurise pas et l'insère dans une requête SQL. La requête est donc modifiée et peut renvoyer n'importe quelles données. Comme tu l'as dit, en utilisant l'ORM de Django, tu devrais normalement en être immunisé.

Concernant ton sujet, la sécurité est un monde très vaste et il est difficile de répondre exhaustivement et correctement à ce genre de questions. Un bon conseil est de toujours respecter cette règle d'or : Ne fais jamais confiance aux données qui proviennent de l'utilisateur. Suppose toujours que ces données sont envoyées par un pirate qui te veut du mal. Ne suppose jamais que tu es en sécurité si tu fais des vérifications côté client (par exemple, en Javascript) ou qu'un certain champ d'un formulaire ou un cookie ne peut être modifié parce qu'il est normalement inaccessible (par exemple, un champ hidden ou disabled).

Autre conseil : sécurise toujours tes données sur ton serveur. Accorde toujours une grande importance aux données de tes visiteurs : les données sensibles comme les mots de passe ou les cartes de crédit ne devraient jamais apparaître en clair dans ta base de données et devraient toujours être hashées (ou à tout le moins chiffrées).

+2 -0

Les XSS : normalement, pas avec Django, je n'utilise que des requêtes via l'ORM.

Je pense que tu confonds un peu deux failles. Les failles XSS (Cross-site scripting) sont habituellement exploitées par un pirate qui passe du code à un site web qui le transmet aux autres clients sans l'échapper, et qui est exécuté par la victime. Par exemple, si j'écrivais alert("je suis un super hacker") et que tu voyais une pop-up s'afficher chez toi, cela voudrait dire que Zeste de Savoir est vulnérable à ce type de faille.

Fayden

Oui, j'ai confondu. Mais je pense que c'est bon pour les XSS aussi, toutes les entrées utilisateur sont échapées.

Pour les autres problèmes, je pense être relativement à l'abri avec Django encore un fois : le module auth chiffre les mots de passe, et je n'ai rien de plus compromettant que ça dans la base de données =)

Merci pour ta réponse !

Le tags tu le mets dans ton titre. Par exemple dans ton cas il suffit de modifier ton titre en [Django] [securite] Django et la securité

firm1

Ok ! Il faudrait peut-être le mettre un peu plus en avant !

+0 -0
  • Les XSS : normalement, pas avec Django, je n'utilise que des requêtes via l'ORM.

Luthaf

Comme l'a dit Fayden, quand on cherche à évaluer la qualité d'un framework en regard de ce point, on se tourne généralement plus vers la mécanique de templating utilisée. Et notamment si elle échappe naturellement les variables injectées.

Le fonctionnement le plus approprié et souple étant (à mon avis) celui de beaucoup de frameworks :

  • Système de rendu des frameworks Web : Rails_layout, Sitemesh pour Grails, …

  • Système de rendu côté client : Angularjs, …

Soit :

Par défaut j'échappe tout, sauf si tu m'indiques explicitement de faire le contraire (au cas par cas)

Si j'en crois la doc Django ne déroge pas à la règle.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte