1 points par GN⁺ 2 시간 전 | 1 commentaires | Partager sur WhatsApp
  • Après avoir lu J’ai interdit les chaînes de requête de Chris Morgan, Susam Pal a supprimé le paramètre de requête via= qu’il avait ajouté à Wander Console
  • Wander Console est une console web décentralisée et auto-hébergeable qui permet aux visiteurs de sites personnels d’explorer aléatoirement des pages recommandées par la communauté ; elle est actuellement hébergée sur plus de 50 sites web et recommande plus de 1 500 pages
  • La fonctionnalité via= permettait aux administrateurs des sites recommandés de voir la provenance des visites dans leurs journaux d’accès, mais elle modifiait directement l’URL de destination, par exemple https://midnight.pub/?via=https://susam.net/wander/
  • Ajouter une chaîne de requête crée une nouvelle URL, qui peut pointer vers une autre ressource ou renvoyer une 404 ; en pratique, cela a cassé des sites comme la page de polices d’int10h.org, qui utilise les chaînes de requête comme identifiants internes
  • Les navigateurs disposent déjà de Referer et de Referrer-Policy pour contrôler l’envoi des informations de provenance ; à partir de Wander Console 0.6.0, le projet n’ajoute donc plus de chaîne de requête de recommandation aux URL d’autrui

La critique des chaînes de requête par Chris Morgan a servi de déclencheur

  • Après avoir lu l’article de Chris Morgan, J’ai interdit les chaînes de requête, Susam Pal a supprimé le paramètre de requête via= qu’il avait ajouté à son projet Wander Console
  • Chris Morgan ne souhaite pas que d’autres ajoutent des informations de suivi à ses URL, comme dans https://chrismorgan.info/no-query-strings?ref=example.com
  • Si l’on a besoin d’informations sur la provenance, il suffit de consulter l’en-tête HTTP Referer, et s’il est absent, c’est probablement pour une bonne raison
  • Susam Pal explique qu’il avait déjà tiré des leçons des retours détaillés laissés autrefois par Chris Morgan sur Hacker News à propos de ses règles de boilerplate CSS, notamment l’importance de conserver les soulignements des liens et la couleur violette des liens visités
  • Depuis, il continue de lire les articles et commentaires de Chris Morgan sur le web, et cite aussi comme exemple utile un commentaire récent sur Lobsters à propos de l’ajout du contexte de l’auteur dans les flux RSS

Structure et objectif de Wander Console

  • Wander Console est une petite console web décentralisée et auto-hébergeable qui permet aux visiteurs de sites personnels de découvrir des sites et pages intéressants recommandés par une communauté d’administrateurs de sites personnels indépendants
  • La console de Susam Pal se trouve sur susam.net/wander/, et lorsqu’on clique sur le bouton Wander, elle charge une page web personnelle aléatoire recommandée par la communauté Wander
  • L’outil se compose d’un fichier HTML qui implémente la console et d’un fichier JavaScript dans lequel l’administrateur du site définit la liste des consoles voisines et des pages web recommandées
  • Il suffit de copier ces deux fichiers sur un serveur web pour l’exécuter avec un simple serveur web, sans logique côté serveur ni logiciel serveur supplémentaire
  • Il peut donc être hébergé même dans des environnements contraints comme Codeberg Pages ou GitHub Pages
  • Lorsqu’on clique sur Wander, la console se connecte à d’autres consoles distantes, récupère les recommandations de pages web, en choisit une au hasard et la charge dans le navigateur
  • Le principe rappelle un peu le défunt StumbleUpon, à la différence qu’ici tout est entièrement décentralisé
  • Cela ressemble aussi un peu à un anneau web, mais le réseau communautaire n’est pas limité à une structure circulaire et peut prendre la forme de n’importe quel graphe
  • À l’heure actuelle, plus de 50 sites web hébergent l’outil, et recommandent ensemble plus de 1 500 pages web
  • Un instantané récent des consoles connues et des pages recommandées est visible sur susam.codeberg.page/wcn/
  • Pour en savoir plus sur l’outil ou l’installer sur votre propre site web, consultez codeberg.org/susam/wander

Le paramètre de requête via= : une mauvaise fonctionnalité

  • La version 0.4.0 de Wander Console a ajouté une fonctionnalité qui attachait un paramètre de requête via= lors du chargement d’une page web
  • Par exemple, si l’on tombait sur midnight.pub depuis la console de susam.net/wander/, la page était chargée à l’URL suivante
https://midnight.pub/?via=https://susam.net/wander/
  • Cette méthode permettait à l’administrateur du site recommandé de vérifier dans ses journaux d’accès que la visite provenait de Wander Console
  • La fonctionnalité a été ajoutée après une demande de fonctionnalité sur Codeberg, mais Susam Pal hésitait au départ
  • À ce moment-là, une échéance de recherche en théorie algébrique des graphes approchait, et l’essentiel de Wander Console a d’ailleurs été développé pendant de courtes pauses au milieu de ce travail
  • La première version de la console a été créée un matin très tôt en environ 1 h 30, et la fonctionnalité via= a elle aussi été implémentée pendant une pause du même genre
  • Susam Pal explique préférer limiter la portée de ses petits projets de loisir et les considérer comme terminés dès lors qu’ils remplissent les exigences essentielles, plutôt que d’y ajouter sans cesse des fonctions
  • Malgré cela, il estime que la fatigue et l’intensité du travail de recherche l’ont empêché d’ignorer cette demande
  • La fonctionnalité via= disposait d’un réglage permettant de la désactiver, mais il considère aujourd’hui que c’était aussi une erreur
  • Une fonctionnalité douteuse, même lorsqu’elle est implémentée, devrait fonctionner sur le principe d’une activation explicite, et non être activée par défaut avec possibilité de désactivation
  • La citation de Jurassic Park, « ils étaient tellement préoccupés par la possibilité de le faire qu’ils ne se sont pas demandé s’ils devaient le faire », lui semble bien résumer la situation

Les chaînes de requête cassent réellement les URL

  • Après avoir implémenté la fonctionnalité via=, une page d’un site web qu’il appréciait ne se chargeait plus via la console
  • Les URL concernées, très proches mais légèrement différentes, étaient les suivantes
  • Les première et deuxième URL se chargent correctement, mais la troisième renvoie une page d’erreur HTTP 404
  • Ce site web utilise la chaîne de requête pour déterminer quelle collection de polices afficher parmi plusieurs disponibles
  • Si l’on ajoute une chaîne de requête arbitraire, le site tente de l’interpréter comme identifiant de collection de polices, ce qui fait échouer le chargement de la page
  • Lorsque Wander Console ajoutait le paramètre de requête via= à la première URL, la page se cassait pour la même raison
  • Modifier une URL, même par un changement aussi minime qu’une chaîne de requête ajoutée, produit une nouvelle URL
  • Cette nouvelle URL peut pointer vers une ressource complètement différente, ou ne pointer vers aucune ressource du tout
  • Susam Pal estime qu’en ajoutant la chaîne de requête via=, il a cassé l’URL valide d’un site web qu’il apprécie

Contourner Referer et Referrer-Policy pose problème

  • Les navigateurs web disposent déjà de l’en-tête HTTP Referer pour transmettre les informations de provenance
  • Cet en-tête est contrôlé par Referrer-Policy
  • Referrer-Policy peut être défini au niveau du serveur, du document ou de chaque lien individuellement
  • Les standards du web fournissent donc déjà un mécanisme volontaire permettant de décider quelle quantité d’informations de provenance doit être envoyée
  • Ajouter une chaîne de requête de recommandation à une URL contourne ces mécanismes de contrôle
  • Cela revient à sortir la question de la confidentialité et de l’attribution du cadre du referrer pour l’inscrire directement dans l’URL de destination
  • Susam Pal estime qu’un outil HTML ne devrait pas modifier les URL de cette manière
  • Il considère également qu’il n’est tout simplement pas juste de modifier une URL à la place de l’utilisateur pour y insérer une chaîne de requête de provenance

Suppression de la fonctionnalité et principe pour la suite

  • La fonctionnalité de chaîne de requête de provenance des recommandations a été supprimée de Wander Console
  • Elle aurait pu rester sous la forme d’une option à activation explicite, mais une fois jugée mauvaise, Susam Pal ne voulait plus qu’elle subsiste dans le logiciel, sous quelque forme que ce soit
  • Le projet étant encore récent et au stade des versions 0.x, il estime que c’était le bon moment pour retirer cette fonctionnalité
  • La parution de J’ai interdit les chaînes de requête de Chris Morgan dans son lecteur de flux lui a servi de déclencheur pour prendre un peu de temps sur son travail de recherche et supprimer cette fonctionnalité
  • La suppression est visible dans le commit b26d77c
  • La dernière version, 0.6.0, n’inclut plus cette fonctionnalité
  • À l’avenir, s’il crée de nouveaux projets de loisir qui chargent des URL, il suivra le principe de charger les URL exactement comme l’auteur du site les a prévues
  • Il en arrive à la conclusion qu’il n’ajoutera pas de chaîne de requête aux URL des autres

1 commentaires

 
GN⁺ 2 시간 전
Commentaires sur Lobste.rs
  • Merci de me dire en quoi mon article t’a aidé. J’écris des critiques détaillées pour plusieurs raisons : pour ma propre satisfaction, pour aider le projet d’origine, parfois parce que le développeur s’y intéresse et parfois non, et aussi parce que quelqu’un sur Internet a tort
    Mais la raison principale, c’est que j’aime enseigner, et que je sais que d’autres lisent ces critiques. En pratique, mes critiques font régulièrement partie des commentaires les plus plébiscités
    J’accorde beaucoup de valeur aux commentaires de remerciement laissés par des inconnus, et des remerciements aussi détaillés donnent une sensation encore plus chaleureuse
    Ce qui est amusant, c’est que j’ai découvert ton site en janvier et que j’avais particulièrement aimé « more purple links, please », mais en le revoyant aujourd’hui, il semble que j’aie influencé ta position sans même le savoir
    J’ai lancé un nouveau site web hier, et je compte publier bien plus de critiques sur divers médias à l’avenir. J’en ai un peu parlé le mois dernier : https://lobste.rs/s/vpdpkq/llm_reviews_cargo_crev#c_8uk441
    J’ai aussi été un peu surpris qu’il existe déjà un autre exemple de page ayant une réaction allergique aux chaînes de requête ajoutées. Sur ce site, seule cette page utilise des chaînes de requête pour le routage des sous-pages, comme ?1, ?2, ?3, ?4, tandis que les autres pages acceptent les chaînes de requête. Une pagination séquentielle est clairement hiérarchique, donc pas vraiment dans l’esprit des URL, mais des formes comme ?page=1 restent courantes
    Au moment de choisir quel code d’état renvoyer, je craignais que le 404 ait des effets de bord à cause d’hypothèses erronées, mais cette inquiétude était peut-être excessive. J’avais oublié qu’une grande partie du web n’utilise pas les chemins de manière significative

    • N’as-tu pas envisagé de renvoyer une réponse "418 I'm not a teapot" pour les chaînes de requête non autorisées ?
  • Bien. Wander console se développe remarquablement bien, et l’attention aux détails dont fait preuve Susam ici semble être une grande part de la raison pour laquelle cela fonctionne
    J’ai vu plusieurs variantes où des chaînes de requête indésirables sont ajoutées à mes URL aussi. La newsletter Programmer Weekly ajoute une requête, mais il y a aussi l’en-tête de référent, donc c’est redondant
    Dans un autre cas, il semble qu’un identifiant unique soit ajouté par abonné, ce que je ne veux absolument pas. Le problème, c’est qu’il n’y a pas de référent, donc je ne sais même pas quel site fait cela
    /blog/modeling-on-demand-pricing/?ck_subscriber_id=<unique-id>

  • J’aimerais être d’accord avec l’idée que « si vous voulez savoir, il suffit de regarder l’en-tête Referer, et s’il n’y en a pas, c’est probablement pour une bonne raison », mais Referer est plus ou moins cassé ou inutile depuis plusieurs années. C’est l’unique raison pour laquelle ce genre de choses existe

    • Qu’est-ce que tu veux dire par là ?
  • « Pourquoi l’avoir ajouté ? J’ai cédé à la pression populaire » : vraiment ? Il s’agissait d’un simple petit commentaire à 5 votes positifs sur une issue sans rapport. La lutte n’a pas dû être si acharnée avant de céder ;-)

    • Je ne vois pas très bien ce que signifie « petit commentaire » ici. Ce commentaire venait de quelqu’un qui avait réellement utilisé mon logiciel, l’avait installé sur son propre site web et avait fait de ce site une partie du réseau communautaire. Je ne considérerais pas cela comme « insignifiant »
      À l’époque où ce projet n’avait qu’une dizaine d’utilisateurs, si une proposition de nouvelle fonctionnalité recevait 5 votes positifs, cela me paraissait relever de la demande populaire
      Mes projets sont généralement de petits outils que je développe comme passe-temps. À quelques exceptions près, ils n’ont pas beaucoup d’utilisateurs. Donc quand je reçois une demande de fonctionnalité ou un rapport de bug, que ce soit sur une issue liée ou non, cela compte pour moi. Je ne peux pas toujours m’en occuper tout de suite, mais je garde en tête quelles demandes suscitent le plus d’intérêt