trustmedis / enlightn
Enlightn - 您的性能与安全顾问,只需一条 artisan 命令即可。
Requires
- php: ^7.2|^8.0
- ext-json: *
- enlightn/security-checker: ^1.1
- guzzlehttp/guzzle: ^5.0|^6.0|^7.0
- laravel/framework: ^6.0|^7.0|^8.0
- nikic/php-parser: ^4.0
- nunomaduro/larastan: ^0.6.11|^0.7
- phpstan/phpstan: ^0.12.59
- symfony/finder: ^4.0|^5.0
Requires (Dev)
- barryvdh/laravel-ide-helper: ^2.8
- brianium/paratest: ^6.1
- fideloper/proxy: ^4.4
- friendsofphp/php-cs-fixer: ^2.18
- mockery/mockery: ^1.3
- orchestra/testbench: ^4.0|^5.0|^6.0
- phpunit/phpunit: ^7.5|^8.0|^9.0
- predis/predis: *
README
一个用于提升您的应用程序性能和安全的 Laravel 工具
简介
将 Enlightn 视为您的性能和安全顾问。Enlightn 将“审查”您的代码和服务器配置,并为您提供有关提高性能、安全和可靠性的可操作建议!
Enlightn OSS(开源软件)版本包含64个自动化检查,可扫描您的应用程序代码、Web服务器配置和路由,以识别性能瓶颈、可能的安全漏洞和代码可靠性问题。
Enlightn Pro(商业版)可在Enlightn 网站购买,并包含额外的64个自动化检查(总计128个检查)。
性能检查(包括37个自动化检查和19个Enlightn Pro检查)
- 🚀 性能快速胜利(内置在Laravel中):路由缓存、配置缓存等。
- ⏳ 性能瓶颈识别:中间件臃肿、识别慢速、重复和N+1查询等。
- 🍽️ 服务器资源:最小化、缓存头部、CDN和压缩头部。
- 🎛️ 基础设施调整:Opcache、缓存命中比、单服务器设置中的Unix套接字等。
- 🛸 选择合适的驱动:为您的应用程序选择合适的会话、队列和缓存驱动。
- 🏆 良好实践:为锁单独的Redis数据库,不要在生产环境中安装开发依赖等。
安全检查(包括48个自动化检查和28个Enlightn Pro检查)
- 🔒 基本安全:关闭生产环境中的应用程序调试,应用程序密钥,CSRF保护,登录节流等。
- 🍪 Cookie安全和会话管理:Cookie加密、安全的Cookie属性、会话超时等。
- 🃏 大量赋值:检测大量赋值漏洞、未受保护的模型等。
- ☢️ SQL注入攻击:检测原始SQL注入、列名SQL注入、验证规则注入等。
- 📜 安全头部:XSS、HSTS、点击劫持和MIME保护头部。
- 📁 未经限制的文件上传和DOS攻击:检测目录遍历、存储DOS、未经限制的文件上传等。
- 💉 注入和钓鱼攻击:检测命令注入、主机注入、对象注入、开放重定向等。
- 📦 依赖管理:后端和前端漏洞扫描、稳定和最新的依赖项检查、许可等。
可靠性检查(包括43个自动化检查和17个Enlightn Pro检查)
- 🧐 代码可靠性和错误检测:无效的函数调用、方法调用、偏移量、导入、返回语句、语法错误等。
- 💪 健康检查:缓存、数据库、目录权限、迁移、磁盘空间、符号链接、Redis等健康检查。
- ⚙️ 检测配置错误:缓存前缀、队列超时、失败作业超时、Horizon供应计划、驱逐策略等。
- 👻 无效路由和无效代码:检测无效路由和无效/无法访问的代码。
- 🏅 良好实践:缓存清除、Composer脚本、环境变量、避免使用全局变量和超全局变量等。
文档
每个可用的128个检查都有详细的文档。您可以在这里找到完整的137页文档。
安装Enlightn OSS
您可以使用Composer包管理器将Enlightn安装到您的项目中
composer require enlightn/enlightn
安装Enlightn后,您可以使用vendor:publish artisan命令发布其资源
php artisan vendor:publish --tag=enlightn
注意:如果您需要安装Enlightn Pro,请访问Enlightn网站上的文档 这里。
运行Enlightn
安装Enlightn后,只需运行Artisan命令 enlightn
来运行Enlightn。
php artisan enlightn
如果您希望在终端之外查看报告,可以添加 --report
标志,以在 Enlightn Web UI 中查看您的报告。
php artisan enlightn --report
如果您想运行特定的分析类,可以指定它们作为可选参数。
php artisan enlightn Enlightn\\Enlightn\\Analyzers\\Security\\CSRFAnalyzer Enlightn\\EnlightnPro\\Analyzers\\Security\\DirectoryTraversalAnalyzer
请注意,类名应该是完全限定的,并且像上面那样使用双斜杠转义。
建议在生产环境中运行
如果您想获得完整的Enlightn体验,建议您至少在生产环境中运行一次Enlightn。这是因为Enlightn的几个检查是特定于环境的。因此,它们可能只在您的应用程序环境为生产环境时触发。
如果您不想在生产环境中运行,可以通过将APP_ENV设置为生产,尽可能接近生产地设置服务和配置,并在本地运行您的生产部署脚本来模拟生产环境。然后运行Enlightn Artisan命令。
查看详细错误信息
默认情况下,enlightn
Artisan命令会突出显示每个失败的检查的文件路径、相关行号和消息。如果您想显示每行的详细错误信息,可以使用--details
选项。
php artisan enlightn --details
在CI环境中使用
如果您想将Enlightn与您的CI集成,可以在您的CI/CD工具中运行Enlightn时简单地触发--ci
选项。
php artisan enlightn --ci
如果您希望在 Enlightn Web UI 中查看您的CI报告,可以添加 --report
标志。请记住,根据 此处 解释的方式将您的项目凭据添加到您的 config/enlightn.php
文件中。
php artisan enlightn --ci --report
Enlightn已为您预配置了在CI模式下可以运行的分析器。因此,上面的命令排除了需要完整设置才能运行的分析器(例如使用动态分析的分析器)。
有关CI集成的更多信息,请参阅 Enlightn文档。
建立基线
有时,尤其是在CI环境中,您可能希望将当前报告的错误列表声明为“基线”。这意味着当前错误将不会在后续运行中报告,只会标记新的错误。
要自动生成基线,可以运行enlightn:baseline
Artisan命令。
php artisan enlightn:baseline
如果您想在CI模式下运行此命令,可以使用--ci
选项。
php artisan enlightn:baseline --ci
有关建立基线的更多信息,请参阅 文档。
Web UI
Enlightn提供了一个美观的Web UI仪表板,您可以在其中查看由您的CI或计划命令触发的Enlightn报告。
Web UI对所有用户都是免费的,包括以下内容:
- 通过类别(总体和按类别)的通过百分比统计。
- 所有失败的检查以及与检查相关的代码片段(如果有的话)。
- 关于新问题和已解决问题数量的指标(与在相同应用程序URL、环境和项目中运行的最新报告进行比较)。
要访问Web UI,您只需在Enlightn网站上免费注册并遵循 此处 提到的说明即可。
安排Enlightn运行
除了将Enlightn与您的CI/CD工具集成之外,定期(例如每天或每周)安排Enlightn运行也是一个好习惯。
// In your app/Console/Kernel.php file: /** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { $schedule->command('enlightn --report')->runInBackground()->daily()->at('01:00'); }
这将允许您监控Enlightn的动态分析检查,这些检查通常被排除在CI之外。报告可以在Enlightn的Web UI上查看。
GitHub机器人集成
Enlightn提供了一个GitHub机器人,可以准备一个突出显示失败检查的报告,并为引入新问题的代码行添加审阅评论。
要集成Enlightn GitHub机器人,请参阅文档。
失败的检查
所有失败的检查都将包括失败原因的描述,以及相关的代码行(如果适用)和特定检查的文档链接。
成绩单
最后,在所有检查运行完成后,enlightn
Artisan命令将输出成绩单,其中包含通过、失败或跳过的检查数量和百分比的信息。
标记为“不适用”的检查不适用于您的特定应用程序,因此被跳过。例如,CSRF分析器不适用于无状态应用程序。
“错误”行下报告的检查表示在分析过程中发生异常的分析器。通常,这种情况不应发生,但如果发生,将显示相关的错误消息,这可能与您的应用程序有关。
我应该多久运行一次Enlightn?
良好的做法是在部署代码或推送新版本时运行Enlightn。建议将Enlightn与CI/CD工具集成,以便在每次推送或新版本时触发它。
除了自动化的CI检查外,您还应定期使用上述安排的命令运行Enlightn。这将允许您监控通常被排除在CI之外的动态分析检查。
特色展示
使用Enlightn的旗舰开源项目
操作系统兼容性
仅支持MacOS和Linux系统使用Enlightn。目前不支持Windows。
贡献指南
感谢您考虑为Enlightn做出贡献!贡献指南可在此处找到。
支持政策
我们的支持政策可在Enlightn文档中找到。
许可
本GitHub仓库上的Enlightn OSS(在GitHub仓库上)根据LGPL v3(或更高)许可证授权。
Enlightn Pro根据商业许可证授权。