setting up a development environment for sif.
- go 1.23 or later
- git
- make
git clone https://github.com/dropalldatabases/sif.git
cd sif
makesif/
├── cmd/sif/ # entry point
│ └── main.go
├── sif.go # main application logic
├── internal/ # private packages
│ ├── config/ # configuration parsing
│ ├── logger/ # logging utilities
│ ├── modules/ # module system
│ ├── scan/ # built-in scans
│ ├── styles/ # terminal styling
│ └── worker/ # worker pool
├── modules/ # built-in yaml modules
│ ├── http/ # http-based modules
│ ├── info/ # information gathering
│ └── recon/ # reconnaissance modules
├── docs/ # documentation
└── assets/ # images, etc
# build
make
# run
./sif -u https://example.com
# run with debug
./sif -u https://example.com -dgofmt -w .golangci-lint rungo test ./...go test -race ./...- create a new file in
internal/scan/ - implement the scan function
- add flag to
internal/config/config.go - integrate in
sif.go
see existing scans for examples.
create a yaml file in modules/:
id: my-new-module
info:
name: my new security check
author: your-name
severity: medium
description: what this checks for
tags: [custom, security]
type: http
http:
method: GET
paths:
- "{{BaseURL}}/path"
matchers:
- type: status
status:
- 200see modules.md for the full format.
the module system is in internal/modules/:
module.go- core interface and typesregistry.go- module registrationloader.go- discovery and loadingyaml.go- yaml parsingexecutor.go- http execution
- add type constant to
module.go - implement executor in new file
- update loader to handle new extension/type
go test ./internal/..../sif -u https://example.com -am./sif -lm # list modules
./sif -u https://example.com -m my-module -d # test specific module- fork the repository
- create a feature branch
- make changes
- run
gofmt -w .andgolangci-lint run - submit pr
use lowercase, present tense:
add sql injection module
fix timeout handling in http executor
update readme with new flags
releases are automated via github actions on push to main.
binaries are built for:
- linux (amd64, 386, arm64)
- macos (amd64, arm64)
- windows (amd64, 386)
- go documentation
- goflags - cli parsing
- nuclei templates - module format inspiration