Хук secrets позначає облікові дані, вкомпільовані у вихідний код, замість того щоб читатися з оточення. Він орієнтується на походження (літерал проти звернення до змінної оточення), а не на вміст значення, тож не потребує вичерпного каталогу префіксів провайдерів і майже не дає хибних спрацьовувань. Це детермінований рушій спеціалізації secrets.
Сигнатури форматів провайдерів, облікові дані в рядках підключення й літерал, прив'язаний до ідентифікатора з назвою секрету, не залежать від мови: той самий рядок читається однаково в будь-якому файлі. Дві евристики, що залежать від синтаксису, тобто звернення до змінної оточення з жорстко закодованим значенням за замовчуванням і секрет, що потрапляє в sink журналу, враховують мову, тож console.log з JavaScript ніколи не шукається у файлі Rust, а os.getenv("X", "default") з Python розпізнається окремо.
Запуск
npx lagune read secrets # scans the whole project
npx lagune read secrets --dir src # scans a directory
npx lagune read secrets --file config.ts # scans a single file
Перевірка виводить до двох розділів. Hardcoded secrets found є набором знахідок (жорстко закодоване значення за замовчуванням для змінної оточення з назвою секрету, облікові дані, вбудовані в рядок підключення, або значення, що відповідає перевіреному формату провайдера), тож хук завершується з ненульовим кодом. Secret handling to review manually є набором зачіпок: звичайний літерал, прив'язаний до ідентифікатора з назвою секрету (його походження можна визначити, а от чи є значення справжнім секретом, ні), і значення з назвою секрету, що потрапляє в sink журналу чи відповіді. Чистий запуск виводить no hardcoded secrets found.
Параметри CLI
| Параметр | Значення | Опис |
|---|---|---|
--dir | каталог | Обмежити перевірку каталогом. Повторюється й поєднується з --file. |
--file | файл | Обмежити перевірку одним файлом. Повторюється й поєднується з --dir. |
Без параметрів хук перевіряє весь проєкт.
Охоплення мов
Знахідка про значення оточення за замовчуванням і зачіпка про sink журналу читають набір форм для кожної мови, тож охоплюють мови нижче й мовчать в інших. Решта три сигнали працюють для кожного файлу.
| Сигнал | Мови |
|---|---|
| Значення оточення за замовчуванням | JavaScript/TypeScript, Python, Ruby, PHP, Kotlin, Java, Go (cmp.Or), Rust, C# |
| Sink журналу чи відповіді | JavaScript/TypeScript, Python, Ruby, PHP, Java, Kotlin, Go, Rust, C, C++, C# |
Ні. Розпізнавання формату секрету, щоб попередити, що його закомічено, є стандартним оборонним інструментом, тією самою операцією, яку виконують gitleaks, trufflehog і push protection від GitHub. Хук постачає сигнатури виявлення (публічні формати токенів), а не справжні секрети, і перевіряє та пояснює, а не викрадає дані.
Часті запитання
Він орієнтується на походження, а не на вміст значення. Формати з високою достовірністю (токени провайдерів, значення оточення за замовчуванням, рядки підключення) є знахідками, що завершуються з ненульовим кодом. Звичайний літерал, прив'язаний до ідентифікатора з назвою секрету, є зачіпкою для перегляду, яку треба підтвердити, а той самий ідентифікатор, прочитаний із process.env, узагалі не позначається.
