En-tĂȘtes HTTP requis

Nos clients Fastly adorent manipuler les en-tĂȘtes HTTP. Choisir la bonne combinaison d'en-tĂȘtes est l'une des meilleures choses que vous puissiez faire pour assurer la sĂ©curitĂ© de votre site et apporter une contribution significative Ă  ses performances.

La plupart des dĂ©veloppeurs connaissent les en-tĂȘtes HTTP importants et utiles. Les plus connus sont Content-Type et Content-Length , ce sont des en-tĂȘtes presque universels. Mais rĂ©cemment, des en-tĂȘtes tels que Content-Security-Policy et Strict-Transport-Security ont Ă©tĂ© utilisĂ©s pour augmenter la Strict-Transport-Security et Link rel=preload pour amĂ©liorer les performances. MalgrĂ© la large prise en charge des navigateurs, seuls quelques-uns les utilisent.

Dans un article prĂ©cĂ©dent, nous avons examinĂ© les en-tĂȘtes inutiles. Voyons maintenant quels en-tĂȘtes doivent ĂȘtre configurĂ©s pour votre site.

Devoirs


Il existe plusieurs services sur Internet qui analyseront votre site et vous conseilleront les en-tĂȘtes Ă  ajouter. J'ai regardĂ© securityheaders.io et l' Observatoire de Mozilla pour complĂ©ter mes propres connaissances et donnĂ©es du rĂ©seau Fastly.

Quelles rubriques doivent figurer sur votre site


Quels sont donc les principaux en-tĂȘtes de vos rĂ©ponses de serveur? La plupart sont responsables de l'amĂ©lioration de la sĂ©curitĂ©:

Contenu-SĂ©curitĂ©-Politique . Agit comme un pare-feu dans le navigateur. Si votre site est compromis, il aide Ă  limiter les dommages en empĂȘchant les connexions Ă  des hĂŽtes non approuvĂ©s. Titre trĂšs important. Si vous ne l'avez pas, vous devez l'activer.

Referrer-Policy . Ajuste le niveau de dĂ©tail Ă  inclure dans l'en-tĂȘte Referer lorsque vous quittez la page. Aide Ă  prĂ©venir les fuites de donnĂ©es vers les sites oĂč les liens vont. Hautement recommandĂ©.

Strict-Transport-Security . EmpĂȘche toute tentative de connexion au site en utilisant HTTP standard. Aide Ă  stopper les attaques MiTM et amĂ©liore la sĂ©curitĂ© du site. Aussi fortement recommandĂ©.

Protection X-XSS . EmpĂȘche certaines formes d'attaques de script intersites, empĂȘchant l'exĂ©cution de script si un balisage d'un document sous la mĂȘme forme est prĂ©sent dans la demande. Par exemple, si vous chargez une page avec l'adresse /index.html?foo=<script>alert('foo');</script> <script>alert('foo');</script> , et dans le code source de la page est <script>alert('foo');</script> alors le script est bloquĂ©. De nos jours, le titre est largement remplacĂ© par CSP.

X-Content-Type-Options . DĂ©finissez la valeur sur nosniff pour empĂȘcher les navigateurs d'exĂ©cuter du contenu de type JavaScript pour lequel la valeur de type de contenu correcte n'est pas dĂ©finie. EmpĂȘche les attaques comme le mixage MIME, et rĂ©cemment Chrome a Ă©tĂ© utilisĂ© pour activer l' isolation du site . Au fil du temps, il devient moins important en raison de l'amĂ©lioration du comportement des navigateurs par dĂ©faut, mais fait toujours partie des meilleures pratiques.

CORS . Les en-tĂȘtes de partage de ressources d'origine croisĂ©e vous permettent de charger une URL avec un script provenant d'une autre source. Il s'agit d'un titre facultatif. Les rubriques de ce type sont permissives et non prohibitives, leur absence offre donc le niveau de sĂ©curitĂ© maximal.

D'autres sont pour la performance:

Timing-Allow-Origin . Donne accÚs aux outils de surveillance pour demander les données de synchronisation. Il s'agit à bien des égards d'informations précieuses, elles peuvent grandement améliorer la qualité des analyses comme Google Analytics ou Speedcurve.

Lien rel = prĂ©charge . Indique au navigateur les ressources critiques qui doivent ĂȘtre tĂ©lĂ©chargĂ©es, mĂȘme si elles ne sont pas immĂ©diatement nĂ©cessaires. Utilisez l'en-tĂȘte pour les polices et les CSS importants.

Synchronisation du serveur Fournit des informations de synchronisation du serveur qui complÚtent l'API de synchronisation de navigation et l'API de synchronisation des ressources avec des informations plus détaillées sur le temps nécessaire pour effectuer les tùches sur le serveur (par exemple, «combien de temps nous avons passé dans MySQL»). Idéal pour surveiller les données de performances, combiné avec les outils RUM Beacon.

Examinons de plus prĂšs certains d'entre eux.

Politique de sécurité du contenu: respectez-la


Bien que Content-Security-Policy soit l'un des titres les plus importants, il est Ă©galement l'un des plus verbeux. Le plus grand en-tĂȘte CSP que j'ai trouvĂ© dans HTTPArchive Ă©tait 10K. Dix kilo-octets . Pour une seule valeur d'en-tĂȘte. Pire: alors que les corps de rĂ©ponse peuvent ĂȘtre diffusĂ©s, les en-tĂȘtes sont mis en mĂ©moire tampon par la plupart des serveurs et des proxys et transmis uniquement aprĂšs la fin. La compression HTTP / 2 aide un peu Ă  les mĂ©moriser entre les requĂȘtes, mais cela ne signifie pas que l'en-tĂȘte de 10 Ko est correct.

De plus, en remplissant le premier paquet entier de votre rĂ©ponse, vous pouvez forcer le navigateur Ă  faire deux appels au serveur juste pour commencer Ă  recevoir le contenu . Pensez donc non seulement Ă  supprimer les en-tĂȘtes inutiles, mais aussi Ă  maximiser les en-tĂȘtes existants.

Referrer-policy


Depuis des temps immĂ©moriaux (c'est-Ă -dire dans le monde du Web depuis la fin des annĂ©es 90 environ), les navigateurs envoient (et Ă©crivent incorrectement ) l'en-tĂȘte Referer . Pour la majeure partie de son histoire, cela a Ă©tĂ© l'un des moyens les plus importants de suivre les mouvements des utilisateurs entre les pages dans les outils d'analyse, ainsi que de comprendre l'origine du trafic entrant. Cependant, ce dernier est associĂ© Ă  d'importants problĂšmes de confidentialitĂ©. Si je clique sur le lien dans l'e-mail du client de messagerie, le site peut dĂ©terminer mon domaine de messagerie. Pire encore, connaĂźtre l'URL complĂšte d'oĂč vous venez, y compris les arguments de la demande, peut rĂ©vĂ©ler les termes de votre derniĂšre requĂȘte de recherche ou des donnĂ©es personnelles telles qu'une adresse e-mail.

Vous pouvez sélectionner plusieurs stratégies parmi les options de politique de référence disponibles, mais mon conseil habituel est «origine-quand-origine croisée», qui active le référent pour toutes les demandes normales, mais tronque la valeur uniquement vers le domaine si le lien passe d'un domaine à un autre . Les liens au sein de votre propre site incluent un référent complet.

Mesure de la synchronisation du serveur sur le serveur CDN Edge


Server-Timing a de nombreuses fonctionnalitĂ©s intĂ©ressantes, et l'une d'entre elles est que vous pouvez ajouter plusieurs instances en rĂ©ponse - et toutes seront combinĂ©es dans un navigateur ou un outil RUM. Autrement dit, si la demande passe par plusieurs Ă©tapes de traitement du serveur - comme cela se produit dans le CDN - chaque Ă©tape ajoute ses propres mesures de temps, et elles n'entrent pas en conflit les unes avec les autres. Voici comment ajouter des mĂ©triques Fastly Ă  l'en-tĂȘte Ă  l'aide de VCL dans la configuration du service Fastly:

 add resp.http.Server-Timing = fastly_info.state {", fastly;desc="Edge time";dur="} time.elapsed.msec; 

Ce nombre inclut le temps passĂ© Ă  attendre le backend, donc dans le cas normal, toutes les mĂ©triques de temps de votre serveur seront infĂ©rieures au nombre Fastly. Cependant, si nous Ă©mettons un document Ă  partir du cache Fastly, vous verrez les mesures de temps d'origine Ă  partir du moment oĂč la page a Ă©tĂ© gĂ©nĂ©rĂ©e, mais le nombre Fastly confirmera que la perte de temps totale est en fait trĂšs faible.

Les mesures d'heure du serveur sont disponibles via l'objet de performance en JavaScript et sont affichées dans le volet réseau de Chrome Devtools:



Actuellement, visualisation des indicateurs au niveau rudimentaire. Mais ils y travaillent dur, donc à l'avenir, l'interface utilisateur devrait s'améliorer considérablement.

Ajoutez tous les en-tĂȘtes corrects.


Fastly est un bon endroit pour ajouter tous les en-tĂȘtes de sĂ©curitĂ© et de performances. Ce qui suit montre comment ils se ressemblent tous. Ajoutez ce code Ă  l'Ă©tape de livraison du flux de demandes, en changeant les valeurs en celles qui conviennent Ă  votre site ( essayez de ne pas copier et coller sans vĂ©rifier que les valeurs conviennent Ă  votre site):

 set resp.http.Content-Security-Policy = "default-src 'self'; frame-ancestors 'self'"; set resp.http.Referer-Policy = "origin-when-cross-origin"; set resp.http.Strict-Transport-Security = "max-age=86400"; # Increase when working well in prod (a year is a common final value) set resp.http.X-XSS-Protection = "1; mode=block"; set resp.http.X-Content-Type-Options = "nosniff"; if (req.http.Origin) { # Consider checking this against an allowlist set resp.http.Access-Control-Allow-Origin = req.http.Origin; set resp.http.Access-Control-Allow-Methods = "GET,HEAD,POST,OPTIONS"; } add resp.http.Server-Timing = fastly_info.state {", fastly;desc="Edge time";dur="} time.elapsed.msec; set resp.http.Timing-Allow-Origin = "*"; set resp.http.Link = "</fonts/myfont.otf>; rel=preload; as=font"; 

Dans le prochain article, nous examinerons certains des en-tĂȘtes les plus exotiques qui commencent Ă  standardiser et Ă  implĂ©menter dans les navigateurs.

Source: https://habr.com/ru/post/fr413205/


All Articles