yof attack проверяет ваше работающее приложение так, как это сделал бы атакующий, с тестовыми аккаунтами, которые вы для него создаёте. Работает на вашем компьютере или в вашем CI.
Вы задаёте границыФайл настроек в вашем репозитории, с фразой согласия и вашими тестовыми аккаунтами.Работает на вашем компьютере или в вашем CIНа превью-сборке. Живой сайт не затрагивается, пока вы не включите его в настройках.Проверяет как атакующийБез входа, со сломанным токеном, запись чужого аккаунта, страницы администратора от имени обычного участника.Считается только то, что случилось дваждыКаждая находка подтверждается дважды и становится регрессионным тестом.Убирает за собой и отчитываетсяУдаляет свои тестовые записи и отправляет в 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 ✓
.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 ✓
Что он проверяет
authОткрывает каждую страницу для вошедших без входа и со сломанным токеном.
tenantАккаунт A создаёт тестовую запись, затем аккаунт B пытается её прочитать, найти в списке и изменить.
rbacОткрывает каждую страницу администратора как обычный участник.
aiВаш ассистент: пытается прочитать его скрытые инструкции, подсунуть ему команды и добраться до данных другого аккаунта.
surfaceОткрытые перенаправления, заголовки безопасности и cookie входа.
Чего он никогда не делает
Он никогда не проверяет ваш рабочий сайт, если ваша конфигурация не включит это для этого приложения.
Он только читает, входит и создаёт свои тестовые записи. Меняет или удаляет только то, что создал сам.
Он останавливается на своём лимите: 300 запросов и 110 секунд, если вы не зададите меньше или больше.
В конце он удаляет свои тестовые записи, даже если вы его остановите.
Ваши тестовые аккаунты остаются в секретах CI. yof никогда не хранит пароль или токен.
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 },
Атакующие тесты
Запускайте их сами бесплатно или доверьте это yof в рамках отчёта.
Запустите сами
Бесплатно
Открытым инструментом командной строки, на вашем компьютере или в CI, с тестовыми аккаунтами, которые вы создаёте.
yof запустит за вас
Входит в цену
В «Отчёт по безопасности: полный» (499 $) и «Пакет свидетельств» (1 490 $). Вы один раз даёте согласие в приложении. Тестовые аккаунты необязательны.
Автоматизированное тестирование В разработке
1 990 $за приложениеСкоро откроется
yof проводит все атакующие тесты на одном приложении по правилам, которые вы сначала подтверждаете.
Patch Continuous В разработке
49 $в месяцСкоро откроется
Повторно атакует ваше приложение при каждом релизе.