检查点 经过 安德烈亚·波拉斯特里 这是一个开发依赖项,它会扫描 Laravel 应用程序的安全问题,并通过一条 Artisan 命令报告这些问题。它会运行 26 项独立的检查,涵盖从依赖项 CVE 审计到源代码级模式匹配以检测注入漏洞等各个方面,并在检查失败时返回非零退出代码,因此可以作为部署前的先决条件。
将其作为开发依赖项安装并运行扫描:
作曲家
要求
--dev
andreapollastri/检查点php
工匠
检查点:扫描
该软件包会自动发现其服务提供商,因此无需注册。它面向 PHP 8.1 及更高版本,并支持 Laravel 8 至 13。
扫描的目的是什么?
这 26 项检查分为几个组。在依赖项方面,Checkpoint 会向……收费。
composer audit
此外,还进行了 npm 审计,以发现已知的 CVE,标记最近几天发布的软件包(常见的恶意软件信号),并查找供应商自动加载器中的可疑条目。
对于源代码,它会针对那些容易引入漏洞的结构进行模式匹配:例如带有变量插值的原始查询、未转义的 Blade 输出、通过函数注入命令等。
exec
和
shell_exec
文件操作中的路径遍历、出站 HTTP 调用中的 SSRF、不安全的反序列化和开放重定向。
第三组检查应用程序配置和安全性:缺少 CSRF 保护、批量赋值暴露、cookie 和会话设置、CORS 规则、禁用的 TLS 验证、遗留的调试调用等。
dd()
和
dump()
弱哈希、不安全的随机数生成、全球可读
.env
文件和敏感路径缺失
.gitignore
。
每个发现都会打印出 PASS、WARN 或 FAIL 严重程度以及一个稳定的 12 字符哈希值来标识它。
运行部分检查
您可以使用以下命令将运行范围缩小到特定检查:
--only
或者排除噪声数据
--skip
以逗号分隔的列表形式传递支票名称:
php
工匠
检查点:扫描
--仅限=
SQL注入风险,CSRF防护php
工匠
检查点:扫描
--skip=
“NPM CVE 审计,调试生产代码中的函数”
对于管道而言,
--json
将人类可读的报告替换为机器输出,命令以代码退出。
1
如果任何检查失败:
php
工匠
检查点:扫描
--json
配置和抑制结果
发布配置文件以切换各个检查项并调整其行为:
php
工匠
供应商:发布
--tag=checkpoint-config
生成的
config/checkpoint.php
允许您禁用不适用的检查,例如关闭仅包含 PHP 的项目上的 npm 审核,并调整包新鲜度阈值:
“检查”
=>
[
检查\ComposerAuditCheck
::班级
=>
真的
,
检查\NpmAuditCheck
::班级
=>
错误的
,],'包装新鲜度'
=>
[
'minimum_age_days'
=>
3
,
“白名单”
=>
[
'andreapollastri/checkpoint'
,],],
当支票上显示的内容您已审核并接受时,请将其哈希值添加到……
suppressed
这样就不会在后续运行中失败,而不会完全忽略检查:
“被压制的”
=>
[
'3ff08f5321c5'
,
'788146a4921b'
,],
CI/CD 脚手架和自定义检查
Checkpoint 可以为您生成管道配置。
php artisan checkpoint:github
写一个
.github/workflows/checkpoint.yml
它基于推送和拉取请求运行,并且
php artisan checkpoint:gitlab
生成 GitLab 的等效版本。
php artisan checkpoint:install-hooks
该命令会将扫描结果附加到您的 Composer 中。
post-update-cmd
和
post-install-cmd
脚本。
您可以通过扩展来添加自己的检查。
AbstractCheck
并返回
CheckResult
:
使用
检查点\检查\抽象检查
;使用
检查点\检查\检查结果
;班级
我的自定义检查
延伸
摘要检查{
民众
功能
姓名
()
:
细绳{
返回
“我的自定义支票”
;}
民众
功能
跑步
()
:
检查结果{
返回
检查结果
::
经过
(
“一切看起来都不错。”
(英文):}}
关于供应链安全的说明
文档中提到一点,无论您是否采用 Checkpoint,这一点都适用:运行
composer install
,
npm install
而且,扫描本身应该在 Docker 容器内进行,而不是直接在您的机器上运行。恶意软件包会在安装后脚本中运行其有效载荷,而这些脚本会在任何扫描器有机会检查代码之前执行,因此受感染的依赖项可以在安装后立即采取行动。Andrea 还建议将扫描与以下工具结合使用:
安全链
它会在安装前阻止已知的恶意 npm 包。这就是 Checkpoint 包新鲜度检查背后的原理,它会标记最近发布的依赖项以防万一。
Checkpoint 是一个静态扫描器,因此它捕获的是模式而非可利用性,它最适合与依赖项锁定和人工审查结合使用。您可以阅读文档并浏览源代码。 GitHub 。







