이 점은 분명히 짚어 둘 만합니다. 보안 스캐너에 대한 대화 대부분이 여기서 멈추는 반론이기 때문입니다.
201개 탐지기 엔진이 사용자의 러너로 내려와 거기서 실행됩니다. SaferICO로 돌아오는 것은 심각도별 개수와, 파일명·행 번호가 붙은 규칙 번호 목록입니다 — 코드는 결코, 증거 문자열도 결코 포함되지 않습니다. 그것들은 소스를 인용하게 되니까요. 테스트 스위트가 아웃바운드 요청 본문을 훑어, 방금 스캔한 소스 조각이 그 안에 없음을 확인합니다.
저장소가 비공개이고 아직 감사받지 않은 팀에게 '아직 공개하지 않은 컨트랙트를 남의 API에 붙여넣으세요'는 대화가 끝나는 지점입니다. 사용자의 러너에서 도는 것은 그 반론과 다투는 대신 그것을 없애는 방법입니다.
실제 코드베이스에서 엔진은 그보다 훨씬 많이 필요합니다. GitHub 러너에는 코어 하나가 통째로 있고 시간 상한이 없으므로, 커밋에서 도는 그 스캔은 축소판이 아니라 완전한 스캔입니다.
러너는 실행할 때마다 현재 버전의 엔진을 가져옵니다. 1년 전에 고정해 둔 워크플로도 오늘은 오늘의 탐지기를 받습니다.
선택적인 마지막 단계가 SARIF를 업로드하면 발견 항목이 GitHub의 Security 탭에 뜨고 diff에 인라인으로 표시됩니다 — 개발자가 실제로 그것을 읽게 되는 자리입니다.
.github/workflows/ 아래 파일 하나이며, 러너가 어떤 의존성 트리도 끌어오지 않습니다. 자기 의존성을 파이프라인에 끌고 들어오는 보안 도구는 스스로의 주장과 싸우는 셈입니다.
도구 자체(스캐너, 콘솔, SAFI 워크스페이스)의 화면은 아직 영어입니다. 이 페이지들은 그 안으로 들어가기 전에 무엇을 하게 되는지 한국어로 끝까지 설명해 드립니다.
엔진이 보고하는 심각도는 심각, 높음, 중간, 낮음, 참고입니다. 기본값은 '높음 이상이면 실패'입니다.
쌓인 문제를 정리하는 동안에는 기준을 낮추고, 깨끗해진 다음에 올리세요.
누구도 통과하지 못하는 관문은 일주일 안에 누군가 꺼 버립니다 — 그리고 꺼진 검사는 아무것도 지키지 못합니다.
탐지기 자체는 이미 /sfi-engine.js에 공개되어 있고, 여기에 감출 것은 없습니다.
여기서 파는 것은 라이선스, 이력 기록, 빌드를 실패시킬지 정하는 그 정책, 그리고 조직 전체를 한눈에 보는 시야입니다.
.github/workflows/ 아래 파일 하나: checkout, sfi-ci.mjs를 가져와 실행, 선택적으로 SARIF 업로드.
계정의 API 키 탭에서 키를 만들어 저장소 secrets에 넣으세요. 러너 자체는 먼저 끝까지 읽어 보고 실행할 수 있는 단일 파일입니다: https://saferico.com/sfi-ci.mjs.
설정한 심각도 이상인 발견 항목이 있으면 빌드가 실패하며, 이는 프로세스 종료 코드로 구현됩니다 — 따로 파싱할 것이 없습니다.
같은 러너를 로컬에서 npx saferico scan ./contracts로 바로 돌릴 수도 있습니다. 푸시하기 전에 한 번 보시는 용도입니다.