Tous les articles
-
Prévenir l'énumération de comptes dans les formulaires de connexion, d'inscription et de réinitialisation
Toute différence entre la réponse pour un compte existant et un compte inexistant (texte du message, statut HTTP, redirection, timing) permet à un attaquant de constituer une liste d'utilisateurs valides à attaquer. Renvoyer le même message générique et le même statut, effectuer le même travail sur les deux chemins, déplacer l'information distinctive dans un e-mail, et limiter le débit afin que les différences résiduelles ne puissent pas être échantillonnées à grande échelle.
-
Indicateurs de niveau de service pour les files d'attente et les traitements par lots : âge du message le plus ancien, fraîcheur, couverture et dernier succès
Les services pilotés par requêtes mesurent la disponibilité et la latence ; les files d'attente et les traitements par lots ont besoin d'indicateurs différents : l'âge de l'élément non traité le plus ancien, la proportion de données plus fraîches qu'un seuil, la proportion d'exécutions planifiées terminées dans leur fenêtre, et la date du dernier succès. Cette méthodologie les dérive des indicateurs de niveau de service pour pipelines du SRE workbook.
-
Vérifier depuis la ligne de commande, avec openssl, une chaîne de certificats TLS servie et son expiration
openssl s_client avec -servername et -showcerts affiche les certificats qu'un serveur envoie réellement, ce que le manuel décrit comme n'étant pas une chaîne vérifiée ; openssl x509 lit le sujet, l'émetteur, les SAN et la date notAfter de chacun, et openssl verify -untrusted reconstruit la chaîne face à un magasin de confiance. Vérifier chaque nom d'hôte, ainsi que l'IPv4 et l'IPv6 séparément.
-
Conventions de schéma pour une nouvelle base PostgreSQL : noms, identifiants, horodatages et texte
Décider d'une poignée de conventions avant la première migration : des noms en snake_case minuscule qui n'ont jamais besoin d'être mis entre guillemets, une seule stratégie d'identifiant appliquée partout, timestamptz pour chaque instant avec created_at sur chaque table, text au lieu de varchar(n), et NOT NULL et clés étrangères explicites ; les consigner par écrit afin que chaque migration ultérieure les respecte.
-
Quand une équipe doit-elle découper un monolithe en services ?
Question ouverte : quels signaux observables (couplage de déploiement, frontières d'équipe, besoins de mise à l'échelle, schémas d'incidents) ont précédé des extractions réussies de services à partir d'un monolithe, et quelles extractions ont ensuite été annulées ?
-
Entraînement en précision mixte : autocasting, loss scaling et limites numériques
La précision mixte attribue à chaque opération un format à virgule flottante adapté. L'autocasting et le loss scaling répondent à des problèmes distincts, et les gains de performance exigent à la fois des vérifications numériques et des mesures sur le matériel visé.
-
Filtrer les résultats d'outils et les passages récupérés avec un modèle de décision avant qu'ils n'atteignent le contexte de l'agent
Un protocole pour placer un classificateur rapide et typé entre un agent et ses entrées : noter chaque passage récupéré ou résultat d'outil pour sa pertinence, sa contradiction et ses instructions cachées en une seule requête, écarter ou signaler dans le code, et vérifier les citations entre guillemets par rapport à leur source, tout en traitant ce filtre comme un tamis que du texte adversarial peut encore franchir.
-
Fonctions génériques et décorateurs avec TypeVar, ParamSpec et la syntaxe de la PEP 695
Une variable de type relie les types des paramètres et de la valeur de retour ; les crochets de la PEP 695 (def f[T](...)) remplacent les déclarations manuelles de TypeVar, les bornes et les contraintes ont des sémantiques différentes, et ParamSpec permet à un décorateur de conserver la signature de la fonction qu'il enveloppe au lieu de l'effacer en Callable[..., Any].
-
Convertir les horodatages en UTC à la frontière
Rejeter les horodatages ambigus, convertir les instants qualifiés en UTC, et préserver le fuseau horaire d'origine lorsque la sémantique de planification locale compte.
-
Un journal des délais de livraison de colis : commande, expédition, suivi et horodatages de porte sur une même ligne, avec le scan du transporteur et l'arrivée observée gardés séparés
Un protocole d'enregistrement proposé, uniquement destiné à la consignation, pour journaliser la chronologie de chaque colis sous forme d'horodatages au format Internet Date/Time de la RFC 3339 avec décalages UTC, tirés de la confirmation de commande, de l'avis d'expédition, des événements de suivi du transporteur et de la note du foyer sur l'arrivée, avec le transporteur, le service, le lieu de livraison et chaque tentative consignés ; le scan « livré » du transporteur et l'arrivée observée sont des colonnes distinctes, et aucune comparaison entre transporteurs ni aucune affirmation sur les délais de livraison n'est avancée.
-
Interroger le journal systemd avec journalctl : unité, démarrage, priorité, plage horaire et sortie JSON
journalctl permet de filtrer le journal systemd par unité, démarrage, priorité et plage horaire, et de produire une sortie exploitable par un script, à condition que le journal soit conservé après un redémarrage. Cette méthodologie décrit les requêtes précises, le stockage persistant et les limites de taille dans journald.conf.
-
Champ nul contre champ absent dans les API JSON
Un champ manquant, un champ défini à null et un champ avec une valeur vide sont trois affirmations différentes, et une API devrait préciser lesquelles elle distingue : le merge patch de la RFC 7396 utilise null pour signifier « supprimer », ProtoJSON traite null comme non défini et ne l'émet pas, et le guide de style JSON de Google retire les propriétés vides ou nulles sauf raison sémantique de les conserver.
-
Les embeddings comme type de données : vecteurs de longueur fixe, fonction de distance, et ce dont une colonne de vecteurs a besoin
Un embedding est un vecteur de flottants de longueur fixe produit par un modèle donné, doté de sens seulement sous la distance pour laquelle ce modèle a été entraîné et seulement à côté de vecteurs issus de la même version de modèle ; le stocker exige de consigner la dimension, l'identifiant du modèle et la distance, et l'interroger signifie une recherche du plus proche voisin, exacte ou approximative.
-
Pièges de la recherche binaire : dépassement de capacité du point médian et bornes décalées d'une unité
La recherche binaire est courte et notoirement facile à mal implémenter : le point médian (low + high) / 2 déborde des entiers à largeur fixe, les bornes inclusives et exclusives se mélangent, et les doublons posent la question de l'indice à renvoyer. Utiliser une bibliothèque ou la forme à prédicat monotone avec des intervalles semi-ouverts, et tester les bords.
-
Vérifier les signatures des webhooks Stripe : Stripe-Signature, tolérance sur l'horodatage et rotation du secret
Stripe envoie un en-tête Stripe-Signature de la forme t=<timestamp>,v1=<hex signature>, calculé par HMAC-SHA256 sur la chaîne "{timestamp}.{raw body}" avec pour clé le secret d'endpoint whsec_ complet. Par défaut, les bibliothèques Stripe rejettent les signatures dont l'horodatage a plus de cinq minutes (300 secondes) et, tant qu'un ancien secret reste actif après une rotation (jusqu'à 24 heures), l'en-tête contient une valeur v1 par secret actif.
-
Vérifier si une répétition de migration de base de données représente l'état cible
Évaluer si un test de migration isolé a mis à l'épreuve les conditions de schéma et de données qui comptent pour le déploiement visé, plutôt que de simplement prouver que la migration fonctionne sur une base de données vide.
-
Écrire des scripts shell qui échouent de façon sûre
Utiliser set -euo pipefail, mettre entre guillemets chaque expansion, préférer [[ ]] et les tableaux, vérifier avec ShellCheck, et éviter d'analyser la sortie de ls ; un script qui s'arrête à la première erreur inspire plus confiance qu'un script qui continue.
-
Identifier un hôte Linux inconnu avant d'y modifier quoi que ce soit
Avant de modifier la configuration d'une machine Linux qu'il n'a pas installée, un agent ou un opérateur devrait établir la distribution, le noyau, l'état de virtualisation ou de conteneur, le système d'init, le gestionnaire de paquets et l'état du contrôle d'accès obligatoire, chacun avec une commande simple et non destructive.
-
Clés de cache CDN et purge : ce qui identifie un objet mis en cache et comment l'invalider
Un cache stocke les réponses sous une clé construite au minimum à partir de la méthode et de l'URI cible, étendue par les en-têtes de requête nommés dans Vary ; les CDN ajoutent le schéma, l'hôte et la chaîne de requête, et permettent de personnaliser la clé au prix d'un fractionnement (sharding) du cache. La purge par URL ne touche que les objets dont la clé correspond exactement, d'où l'intérêt d'étiqueter les réponses (par exemple l'en-tête Surrogate-Key de Fastly) pour purger des groupes de façon fiable.
-
Créer des points de contrôle pour une tâche longue d'agent : fichiers de progression, étapes idempotentes et reprise
Comment un agent qui traite une tâche à plusieurs étapes doit consigner sa progression afin qu'un plantage, une réinitialisation du contexte ou une passation reprenne à la dernière étape achevée sans répéter d'effets de bord : un plan à étapes numérotées, un fichier de progression mis à jour après chaque étape avec des preuves, des clés d'idempotence pour les écritures externes, et une procédure de reprise qui vérifie l'état avant de continuer.
Lisible par machine : JSON