沃德,由……创建 贾卡尼·亚辛 是一个用 Go 语言编写的命令行安全扫描器,其设计围绕 Laravel 的结构展开。它不会对代码库进行通用的模式匹配,而是首先解析项目的结构——路由、模型、控制器、中间件、Blade 模板、配置文件、环境变量和依赖项——然后针对该上下文执行有针对性的检查。
安装
Ward 以 Go 二进制文件的形式分发,因此您需要确保已安装 Go,然后才能运行:
去
安装
github.com/eljakani/ward@latest确保 $GOPATH/bin 已添加到您的 PATH 环境变量中。出口
小路
=
“
$PATH
:$(
去
env GOPATH)/bin"
安装完成后,运行
ward init
创造
~/.ward/
带有默认配置文件、按类别组织的 42 条以上内置规则,以及用于报告和扫描历史记录的目录。
扫描项目
将 Ward 指向本地目录或远程 Git 仓库:
# 本地项目病房
扫描
/path/to/laravel-project# 远程仓库(浅克隆)病房
扫描
https://github.com/user/laravel-project.git
在终端中运行 Ward 时,会显示一个终端用户界面 (TUI)。扫描视图会显示管道进度和扫描器运行时的实时严重性计数。完成后,结果视图会显示一个可排序的发现结果表格,其中包含严重性徽章、类别分组以及一个详细信息面板,该面板显示描述、代码片段和修复指南。
它检查的内容
沃德飞船配备四个独立的扫描引擎:
- 环境扫描器
对您的设备进行 8 项检查
.env文件(包括生产环境中启用的调试模式)缺失或损坏APP_KEY以及泄露的秘密.env.example。 - 配置扫描器
对您的设备进行 13 项检查
config/*.php文件涵盖硬编码凭据、不安全的会话标志、CORS 通配符来源和缺失的安全选项。 - 依赖扫描器
查询
OSV.dev
实时查询您的咨询数据库
composer.lock用于查找存在漏洞的 Packagist 软件包。由于它查询的是实时数据而非捆绑列表,因此反映的是当前的安全公告,而不是该工具上次发布时的信息。 - 规则扫描器
应用 42 条规则,涵盖 7 个类别:秘密(硬编码密码、API 密钥、AWS 凭证)、注入(SQL、命令、
eval), XSS(未转义的 Blade 输出、JavaScript 注入)、调试工件(dd(),dump(),phpinfo()),弱密码学(md5,sha1不安全的 RNG)、配置问题(CORS、CSRF、批量分配)和身份验证漏洞(缺少中间件、缺少速率限制)。
输出格式
配置输出格式
~/.ward/config.yaml
:
输出
:
格式
:[
json
,
萨里夫
,
html
,
降价
]
你
:
./报告
- JSON — 机器可读结果
- 萨里夫 — 与 GitHub 代码扫描和 IDE 集成兼容
- 超文本标记语言 — 独立的深色主题可视化报告
- Markdown — 适用于公关评论
CI/CD 集成
当发现的问题达到或超过指定的严重程度时,Ward 会返回非零退出代码,从而可以轻松地控制部署:
病房
扫描
。
- 输出
json
--失败
高的
以下是项目文档中的 GitHub Actions 示例:
姓名
:
病房安全扫描在
:[
推
,
拉取请求
]工作
:
安全扫描
:
连载
:
Ubuntu 最新版本
步骤
:-
用途
:
动作/结帐@v4-
用途
:
actions/setup-go@v5
和
:
go 版本
:
'1.24'-
姓名
:
安装 Ward
跑步
:
go install github.com/eljakani/ward@latest-
姓名
:
跑沃德
跑步
:
ward init && ward scan . --输出 json-
姓名
:
上传 SARIF
如果
:
总是()
用途
:
github/codeql-action/upload-sarif@v3
和
:
sarif_file
:
病房报告.sarif
基线管理
对于希望认可现有发现但又不抑制未来发现的团队,Ward 支持一种基线工作流程:
# 捕获当前状态病房
扫描
。
- 输出
json
--更新基线
.ward-baseline.json# 在后续运行中,抑制已知的发现,仅对新的发现判定失败。病房
扫描
。
- 输出
json
--基线
.ward-baseline.json
--失败
高的
承诺
.ward-baseline.json
将代码添加到您的存储库可以让团队跟踪哪些发现已被认可,并在持续集成中发现回归问题。
自定义规则
降低
.yaml
文件插入
~/.ward/rules/
定义其他检查。规则支持正则表达式或子字符串模式、文件存在性检查以及否定模式(当某些内容缺失时触发),例如,标记缺少路由的路由。
@csrf
您可以指定 PHP 文件、Blade 模板、配置文件、环境文件、路由、迁移或 JavaScript 文件。
规则
:-
ID
:
TEAM-001
标题
:
“硬编码的内部服务 URL”
严重性
:
中等的
模式
:-
类型
:
正则表达式
目标
:
php文件
图案
:
'https?://internal-service\.\w+'
也可以禁用单个内置规则或覆盖其严重程度。
config.yaml
无需修改规则文件本身。
扫描历史记录
Ward 将每次扫描结果保存到
~/.ward/store/
并且在后续运行中,它会显示与先前扫描的差异——例如,“2 个新问题,3 个已解决问题 (12→11)”——以便您可以跟踪您的安全状况如何随时间变化。
访问 埃尔贾卡尼/病房 在 GitHub 上浏览源代码并开始使用。





