En supposant qu'un site utilise tout le HTTPS tout le temps (LB redirige le port 80 vers 443), y a-t-il une raison pour ne pas forcer chaque cookie défini par l'application à utiliser les deux secure
ET httponly
?
Actuellement, par exemple, une analyse PCI ne signalera que jsessionid
comme n'utilisant pas l'attribut secure
, mais demain ce pourrait être l'autre, donc j'essaie de prendre de l'avance.
Oui, il y a des cas où vous ne voulez pas HTTP UNIQUEMENT ou SÉCURISÉ.
Pour HTTP uniquement, vous souhaiterez peut-être que javascript interagisse avec le cookie. Peut-être que vous suivez l'état de la page dans un cookie, écrivez dans le cookie avec JS et lisez à partir de JS. De plus, je vois souvent CSRF implémenté avec un cookie non uniquement http.
Pour le cookie sécurisé, je ne m'attendrais pas à ce que les cookies n'aient jamais l'attribut sécurisé, à l'exception de ces deux cas:
En pratique, si vous exécutez un site https, définissez toujours le cookie sécurisé , et si vous ne connaissez pas les exigences JS, toujours erreur sur le côté avec HTTPONLY défini .
MISE À JOUR DES ADRESSE DES COMMENTAIRES
Beaucoup de discussions pour savoir si vous devez ou non utiliser TLS en production. Posé la question ici:
Concernant httponly
, vous demandez essentiellement s'il s'agit de cas d'utilisation où un cookie doit être lu ou défini par Javascript. En règle générale, certains paramètres de l'interface utilisateur (choix de la langue ...) sont conservés de cette manière, ce qui se briserait si le cookie est httponly.
Quant à secure
: puisque selon votre description le site utilise tout le temps https cela ne nuit pas à avoir tous les cookies secure
.
Drapeau sécurisé
Étant donné que l'application s'exécute sur HTTPS, c'est-à-dire que LB redirige tout le trafic du port 80 vers 443, il est toujours nécessaire d'activer l'indicateur sécurisé à la lumière du scénario suivant.
Par conséquent, bien que le LB soit configuré pour rediriger le trafic non sécurisé du port 80 vers le trafic sécurisé du port 443, une attaque MiTM réussie pourrait avoir lieu à step 2
entraînant l'emprunt d'identité d'un utilisateur en volant les cookies sensibles. De plus, vérifier que les hyperliens et les redirections sont correctement codés est une activité comparativement plus ardue que d'activer l'indicateur sécurisé sur les cookies sensibles. Pour conclure, bien qu'une redirection soit établie au niveau LB, il pourrait y avoir des scénarios possibles où un MiTM fructueux pourrait être exécuté en raison de l'absence du drapeau sécurisé.
Drapeau httponly
Il s'agit d'un indicateur dont la signification reste indépendante de la sécurité de la couche de transport (SSL/TLS). Le drapeau httponly est utilisé pour empêcher javascript d'accéder aux cookies sensibles comme les cookies de session en cas de réussite d'une attaque Cross-Site Scripting (XSS). Lorsque l'indicateur httponly n'est pas défini sur la valeur du cookie, le javascript malveillant injecté dans l'application en raison d'une faille au niveau de l'application pourrait finir par saboter la confidentialité, l'intégrité et la disponibilité des comptes d'utilisateurs en lisant les cookies de session et en les envoyant à des serveurs distants par exemple , usurpant ainsi avec succès l'identité d'un utilisateur légitime. Par conséquent, le drapeau httponly doit toujours être défini sur tous les cookies ou au moins les cookies sensibles.
Je vais vous donner un exemple pratique d'un cookie non httponly.
Lorsqu'un visiteur vient sur mon site, deux cookies lui sont enfoncés dans la gorge.
phpsession -> secure httponly samesite:lax
cookie_law -> secure samesite:lax
Le cookie_law
contient un objet cookie codé json encodé en base64 qui stocke les paramètres des cookies.
Mon javascript lit ces cookies pour déterminer de charger des analyses, des adwords dépendant de l'autorisation ou de l'état.
Mon javascript utilise également ce cookie pour faire fonctionner l'éditeur de paramètres de cookie.
Si je mets le drapeau httponly sur les cookies, le javascript ne peut pas le lire. Et je ne peux pas utiliser php pour déterminer l'état de charge lors du rendu des scripts en raison de plusieurs couches de mise en cache. C'est pourquoi j'ai choisi de quitter le httponly de ce cookie.
Le javascript doit avoir accès pour pouvoir le lire.
http-only: Parfois, les préférences des utilisateurs (taille de police, thème, langue, ...) sont définies et agies côté client. Il s'agit du cas le plus courant pour lequel il n'est pas nécessaire de définir uniquement http.
secure: Comme le site/l'application insiste sur HTTPS, il n'y a aucune raison de ne pas utiliser l'indicateur sécurisé. Si le site/l'application doit offrir un accès via HTTP et que vous avez besoin de détails pour passer d'un contexte crypté à aucun autre (peut-être à nouveau les préférences d'affichage de l'utilisateur), vous devez laisser cette option désactivée.
Bien que cela puisse sembler sans importance car vous forcez actuellement l'accès HTTPS, vous devez autoriser les échecs dans la mesure où: votre application peut être redéployée avec des paramètres incorrects, ou vos utilisateurs peuvent se retrouver soumis à un MItM (quelque chose de malveillant ou un proxy mal configuré) ) qui a un effet similaire et avec ce paramètre défini, les choses échouent (du point de vue de la sécurité) en arrêtant de fonctionner plutôt qu'en travaillant de manière non sécurisée.
Général: Comme il s'agit de mesures de sécurité, aussi minimes qu'elles puissent paraître, définissez toujours les deux, sauf si vous avez une raison spécifique de ne pas le faire, plutôt que de ne jamais les laisser par défaut, sauf si vous pensez qu'elles sont nécessaires.