12
votes

Django - Liens générés avec {% URL%} - Comment les sécuriser?

Si je veux donner une option pour que les utilisateurs se connectent à un site Web à l'aide de https: // au lieu de http: // , je voudrais mieux donner leur une option pour y arriver dans mon point de vue ou mon modèle.

J'aimerais avoir le lien "Utiliser la connexion sécurisée" sur ma page de connexion - mais alors, comment puis-je le faire sans encadrer l'URL?

J'aimerais pouvoir simplement faire: xxx

et faites-leur pointer sur http://example.com/login et https://example.com/login .

Comment puis-je faire cela?


2 commentaires

Curieusement, pourquoi un utilisateur voudrait-il se connecter via un HTTP lorsque HTTPS est disponible?


Parce que leur proxy ne laisse que le port 80 à travers (vu cette aberration plusieurs fois)


3 Réponses :


0
votes

Peut-être que vous pourriez peut-être écrire une balise url_https qui fait la même chose que URL mais pointe vers la version HTTPS de l'URL.


0 commentaires

6
votes

Je n'ai pas beaucoup travaillé avec des URL sécurisées, mais j'ai travaillé un peu avec Satchmo, qui a un middleware et des utils. Le middleware vérifie simplement la clé ssl = true code> dans les paramètres de vue et permet de sécuriser la demande de cette façon. Vous n'avez probablement pas besoin de le faire ce complexe, mais vous pouvez jeter un coup d'œil à la manière dont il est mis en œuvre.

Satchmo est sur Bitbucked ici p>

J'ai également été capable de trouver des extraits pour les milieux moyens qui devraient également pouvoir vous aider à obtenir une URL de connexion sécurisée: p>

  • http://www.djangosnippets.org/snippets/85/ li >
  • http://www.djangosnippets.org/snippets/240/ li > ul>

    Le premier est l'original, tandis que le 2e devrait être une version améliorée AB, à un moment donné, mais pourrait ne plus être le cas. Vous pouvez jeter un coup d'œil à eux. P>

    Utilisation de SatchMo ou de l'un des extraits de middleware, vous devriez pouvoir faire quelque chose comme P>

    {% url login_page %}
    {% url login_page SSL=1 %}
    


2 commentaires

Les extraits liés sont une bonne solution complète si vous souhaitez définir certaines URL en tant que HTTPS - uniquement et que vous avez ensuite un middleware en prendre soin de là. Ils sont excédentaires si tout ce que vous essayez de faire est de créer un lien HTTPS.


Vrai, pour un seul lien seul, cela n'en vaut pas la peine. Dans ce cas, votre solution est meilleure.



19
votes

Le {% URL%}} code> génère uniquement la partie de chemin de l'URL, pas la partie hôte. Cela ne génère que quelque chose comme "/ chemin / à / ici" (tout ce que vous avez à faire est de "voir la source" et que vous verrez que tout le contenu du href code>). C'est votre navigateur qui suppose si vous êtes actuellement sur http://example.com Le lien doit également être dans http://example.com . Donc, tout ce que vous avez à faire pour générer un lien sécurisé dans votre modèle est la suivante:

<a href="https://{{ request.get_host }}{% url blah %}">


3 commentaires

Cela a 1 désavantage cependant; Lorsque / si je déplace le site sur Diffrent domaine, ou quelque chose comme ça, les URL relatives ne se casseront pas, celle-ci le fera. Je cherchais quelque chose de plus comme demande.build_absolute_uri () fonction avec option pour remplacer http avec https, mais je suppose qu'il est préférable de la mettre en œuvre par moi-même.


Eh bien, il n'y a aucun moyen de forcer HTTPS et d'utiliser une URL relative. Édité de mentionner que vous pouvez utiliser le cadre de sites pour éviter le code de domaine.


L'option ci-dessus à l'aide de request.get_host fait essentiellement la même chose que request.get_absolute_uri et forçant https.