yof attack teste votre propre app en marche comme le ferait un attaquant, avec des comptes de test que vous créez pour lui. Il tourne sur votre machine ou dans votre CI.
yof attack · your machine or your CIDonnées d'exemple
Vous écrivez le périmètreUn fichier de configuration dans votre dépôt, avec une phrase d'accord et vos propres comptes de test.Il tourne sur votre machine ou dans votre CISur une version de prévisualisation. Votre site en ligne reste à l'écart, sauf si votre configuration l'active.Il teste comme un attaquantSans connexion, avec un jeton cassé, la fiche d'un autre compte, des pages d'administration en simple membre.Seul ce qui arrive deux fois compteChaque constat est confirmé deux fois et devient un test de régression.Il nettoie et fait son rapportIl supprime ses propres données de test et envoie à yof seulement des résultats masqués.
.yof/attack.jsonjson
{"app": "shop.example.com","consent": "I own shop.example.com and allow yof attack to test it…","accounts": { "a": { … }, "b": { … } },"production": { "enabled": false }}
$ npx @yof/cli attack http://localhost:3000
auth · signed-in pages with no sign-in and a broken token✓
tenant · account B reads account A's record1 finding
rbac · admin pages as a normal member✓
surface · redirects, headers, the sign-in cookie✓
tenant: seen twice · a regression test was written ✓
deleted its own test records ✓ · masked results sent to yof ✓
.yof/attack.jsonjson
{"app": "shop.example.com","consent": "I own shop.example.com and allow yof attack to test it…","accounts": { "a": { … }, "b": { … } },"production": { "enabled": false }}
$ npx @yof/cli attack http://localhost:3000
auth · signed-in pages with no sign-in and a broken token✓
tenant · account B reads account A's record1 finding
rbac · admin pages as a normal member✓
surface · redirects, headers, the sign-in cookie✓
tenant: seen twice · a regression test was written ✓
deleted its own test records ✓ · masked results sent to yof ✓
.yof/attack.jsonjson
{"app": "shop.example.com","consent": "I own shop.example.com and allow yof attack to test it…","accounts": { "a": { … }, "b": { … } },"production": { "enabled": false }}
$ npx @yof/cli attack http://localhost:3000
auth · signed-in pages with no sign-in and a broken token✓
tenant · account B reads account A's record1 finding
rbac · admin pages as a normal member✓
surface · redirects, headers, the sign-in cookie✓
tenant: seen twice · a regression test was written ✓
deleted its own test records ✓ · masked results sent to yof ✓
.yof/attack.jsonjson
{"app": "shop.example.com","consent": "I own shop.example.com and allow yof attack to test it…","accounts": { "a": { … }, "b": { … } },"production": { "enabled": false }}
$ npx @yof/cli attack http://localhost:3000
auth · signed-in pages with no sign-in and a broken token✓
tenant · account B reads account A's record1 finding
rbac · admin pages as a normal member✓
surface · redirects, headers, the sign-in cookie✓
tenant: seen twice · a regression test was written ✓
deleted its own test records ✓ · masked results sent to yof ✓
.yof/attack.jsonjson
{"app": "shop.example.com","consent": "I own shop.example.com and allow yof attack to test it…","accounts": { "a": { … }, "b": { … } },"production": { "enabled": false }}
$ npx @yof/cli attack http://localhost:3000
auth · signed-in pages with no sign-in and a broken token✓
tenant · account B reads account A's record1 finding
rbac · admin pages as a normal member✓
surface · redirects, headers, the sign-in cookie✓
tenant: seen twice · a regression test was written ✓
deleted its own test records ✓ · masked results sent to yof ✓
Ce qu'il teste
authOuvre chaque page réservée aux connectés sans connexion et avec un jeton cassé.
tenantLe compte A crée une fiche de test, puis le compte B essaie de la lire, de la trouver dans une liste et de la modifier.
rbacOuvre chaque page d'administration en tant que simple membre.
aiVotre assistant : essaie de lire ses instructions cachées, de lui glisser des commandes et d'atteindre les données d'un autre compte.
surfaceRedirections ouvertes, en-têtes de sécurité et cookie de connexion.
Ce qu'il ne fait jamais
Il ne teste jamais votre site en ligne, sauf si votre configuration l'active pour cette app.
Il lit, se connecte et crée ses propres fiches de test, rien de plus. Il ne modifie ou ne supprime que ce qu'il a créé.
Il s'arrête à son budget : 300 requêtes et 110 secondes, sauf si vous fixez moins ou plus.
À la fin, il supprime ses fiches de test, même si vous l'arrêtez.
Vos comptes de test restent dans les secrets de votre CI. yof ne garde jamais de mot de passe ni de jeton.
shell
$ npx @yof/cli attack http://localhost:3000
.yof/attack.jsonjson
1{2"app": "shop.example.com",3"consent": "I own shop.example.com and allow yof attack to test it and its preview builds with my own test accounts.",4"accounts": {5"a": { "header": "Authorization", "env": "YOF_ATTACK_A" },6"b": { "header": "Authorization", "env": "YOF_ATTACK_B" },7"admin": { "header": "Authorization", "env": "YOF_ATTACK_ADMIN" }8 },
Tests d'attaque
Lancez-les vous-même gratuitement, ou laissez yof les lancer pour vous dans un rapport.
Lancez-les vous-même
Gratuit
Avec l'outil en ligne de commande open source, sur votre machine ou dans votre CI, avec des comptes de test que vous créez.
yof les lance pour vous
Inclus
Dans « Rapport de sécurité : complet » (499 $US) et « Pack de preuves » (1 490 $US). Vous donnez votre accord une fois dans l'app. Les comptes de test sont facultatifs.
Mission automatisée En développement
1 990 $USpar appOuvre bientôt
yof lance tous les tests d'attaque sur une app, selon des règles que vous confirmez d'abord.
Patch Continuous En développement
49 $USpar moisOuvre bientôt
Attaque à nouveau votre app à chaque mise en production.