6.2.0
API v6.2.0 — Version de sécurité : les entrées abusives sont bornées sur toutes les versions, dates de /cron corrigées dans certains fuseaux.
- C'est une version de sécurité : les problèmes relevés par un audit de toute l'API sont corrigés, endpoint par endpoint. Aucun endpoint n'est ajouté ni retiré. Une requête légitime obtient exactement la même réponse qu'avant ; seules les entrées abusives sont désormais refusées, avec l'erreur
400habituelle, ou bornées. Deux changements sont visibles : /cron env5etv6, dont les dates étaient fausses dans certains fuseaux (dates manquantes ou répétées à l'est de UTC, et minuit local sauté juste après un changement d'heure) et sont maintenant correctes, et /chat, qui ne garde plus que les200derniers messages d'un salon. - Exceptionnellement,
v4etv5reçoivent aussi ces correctifs, alors qu'elles sont figées par ailleurs : les mêmes limites et les mêmes refus s'appliquent à chaque version qui possède l'endpoint, etv6suitv5. Chaque point ci-dessous précise les versions concernées, et la page de chaque endpoint donne les limites et les messages d'erreur exacts.
- /captcha (
v4,v5etv6) : le paramètretextest limité à32caractères. Env5etv6, le jeton signé d'un challenge ne peut plus être forgé ni échangé contre un jeton d'un autre type : un jeton /pow n'est plus accepté comme jeton de captcha, ni l'inverse. Un jeton est brûlé après5mauvaises réponses et répond ensuiteused. POST /captcha accepte aussi unminLengthfacultatif : une bonne réponse à un captcha généré plus court est refusée avec le motifweak. SansminLength, rien ne change. - /barcode (
v4,v5etv6) : lesdatades formats à longueur variable,code128etcode39, sont limitées à128caractères (Data cannot exceed 128 characters). Les formats à longueur fixeean13,ean8etupcane sont pas concernés. - /regex (
v4,v5etv6) : l'évaluation d'un motif est interrompue après25ms et répond400avecPattern took too long to evaluate: un motif catastrophique ne peut plus bloquer le serveur. Une clépatternoutextrépétée dans la requête est refusée comme une clé absente. Un motif qui se termine à temps renvoie les mêmes correspondances qu'avant. - /cron : en
v5etv6, des dates manquaient ou se répétaient dans les fuseaux à l'est de UTC, et un horaire à minuit local pouvait être sauté juste après un changement d'heure ; les résultats sont maintenant corrects. Lav4garde ses résultats précédents. Sur les trois versions, une expression cron qui ne peut jamais aboutir, comme0 0 31 2 *, se termine aussitôt avec une liste vide au lieu de tourner jusqu'à sa limite, et une recherche est bornée dans le temps (250ms env5etv6,1s env4) : les dates trouvées jusque-là sont renvoyées. - /chat et /tic-tac-toe (
v4,v5etv6) : leurs entrées sont bornées, un nom d'utilisateur à100caractères (1000pour l'actionfetchde/chat, qui est indexée par l'adresse IP du lecteur), un message à1000et un identifiant de session, de partie ou de chat privé à256(Message cannot exceed 1000 characters). Les noms comme__proto__ouconstructorsont désormais des valeurs ordinaires./chatgarde les200derniers messages du salon public et de chaque chat privé, n'autorise que1000chats privés à la fois (Too many active private chats), et remplace par la date du serveur untimestampdu client qui ne peut pas être stocké tel quel, un objet ou un texte de plus de128caractères. - /qrcode (le paramètre
icon) et /hyperplanning (v4,v5etv6) récupèrent les fichiers distants via un fetch protégé : les adresses internes sont refusées après résolution du nom et à chaque redirection, et les redirections sont plafonnées à10. Un calendrier s'arrête à1Mo et5000événements, une icône à2Mo et16mégapixels (Icon must be under 16 megapixels). Déprécié - POST /asymmetric (
v5etv6) : les paires de clés RSA sont désormais générées hors du thread principal, deux à la fois, si bien qu'une grande clé ne fige plus le serveur pour les autres requêtes. La réponse est la même.
- Le rate limiter ne compte dans la limite globale de l'instance que les requêtes qu'il admet : un client refusé ne peut plus épuiser le budget des autres. Un client IPv6 est compté par son bloc
/64, une adresse IPv6 mappée en IPv4 par sa forme IPv4, et chaque réseau/48est plafonné à quatre fois le quota horaire d'un client (Too many requests from your network.,429). Une adresse transmise qui n'est pas une adresse IP compte comme celle du pair connecté. - Les en-têtes de sécurité partent désormais en premier, si bien que toute réponse les porte, et les corps de requête, toujours plafonnés à
10ko, sont lus après le limiteur, si bien que les corps mal formés sont comptés eux aussi. - Quand
TRUSTED_PROXIESn'est pas défini, le serveur continue de supposer exactement un reverse proxy et journalise désormais un avertissement au démarrage. Ce défaut est juste derrière un seul proxy comme nginx ou Caddy ; exposé directement, un appelant peut forger l'en-têteX-Forwarded-Foret choisir son adresse, et derrière plusieurs sauts, tous les appelants sont comptés comme le proxy le plus proche. Le README explique quand définir la variable.
- Nouvel export
asymmetricAsync, disponible depuis@moxon/api,@moxon/api/v5et@moxon/api/v6: il prend les mêmes arguments et renvoie le même résultat queasymmetric, sous forme de promesse, et génère les paires de clés RSA sur le pool de threads, deux au plus à la fois.POST /asymmetricl'utilise. - L'export expérimental Manifest n'est pas modifié par cette version : seul
hashy figure toujours, et la description des autres endpoints sous forme de contrats est prévue pour une version ultérieure. Expérimental - Des dépendances sont mises à jour :
body-parserpasse en2.4.0, avec lesqs(6.16.1) eticonv-lite(0.7.3) qu'il utilise. Ces versions sont fixées dans lepackage-lock.jsondu dépôt : elles protègent les clones et les déploiements faits avecnpm ci.
- La page de chaque endpoint touché par la version donne ses nouvelles limites : les paramètres, les messages d'erreur exacts et une note sur ce qui est borné. POST /captcha documente son nouveau paramètre
minLength. Exceptionnellement, les pages dev4et dev5sont mises à jour aussi, pour ces limites et ces refus seulement. - La page Authentification explique comment les requêtes sont comptées, par bloc
/64et par réseau/48pour l'IPv6, et la liste des erreurs429de l'accueil reprendToo many requests from your network.. - La page Instance liste
TRUSTED_PROXIESetGLOBAL_LIMITparmi les réglages d'une instance que vous faites tourner, avec un avertissement sur l'alignement de la chaîne de proxys.
Mis à jour le 14 novembre 2026