Merge branch 'trunk'

This commit is contained in:
Vincent BRIDIER 2022-10-11 12:06:30 +02:00
commit bd3133f06c
No known key found for this signature in database
GPG key ID: 8571BFA20420D512
5 changed files with 28 additions and 15 deletions

View file

@ -264,9 +264,8 @@ class TicketController extends Controller
$ticket->file2 = ToolboxHelper::storeImage($ticket->getTable(), $fileTicket2);
}
if ($request->labels) {
$ticket->labels()->sync($request->labels);
}
$ticket->labels()->sync($request->labels);
$ticket->site()->associate($site);
$ticket->saveOrFail();

View file

@ -37,7 +37,7 @@ class Kernel extends HttpKernel
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\SecureHeaders::class,
'xss'
'htmlsanitize'
]
];
@ -59,6 +59,6 @@ class Kernel extends HttpKernel
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'xss' => \App\Http\Middleware\XssSanitizer::class,
'htmlsanitize' => \App\Http\Middleware\HtmlSanitizer::class,
];
}

View file

@ -5,7 +5,7 @@ namespace App\Http\Middleware;
use App\Lib\ToolboxHelper;
use Illuminate\Http\Request;
class XssSanitizer
class HtmlSanitizer
{
/**
* Handle an incoming request.
@ -18,11 +18,17 @@ class XssSanitizer
public function handle(Request $request, \Closure $next, ...$params)
{
$inputs = $request->all();
array_walk_recursive($inputs, function (&$input, $name) use ($params) {
/** @var callable|null */
$cleanInput = null;
$cleanInput = function (&$input, $name, $rootName = null) use ($params, &$cleanInput) {
// * Nested element array
if (is_array($input)) {
array_walk_recursive($input, $cleanInput, $name);
}
if (!is_string($input)) {
return;
}
if (in_array($name, $params)) {
if (in_array($name, $params) or in_array($rootName ?? $name, $params)) {
// ? Is a json input ?
if ($isJson = \json_decode($input, true) and is_array($isJson)) {
// ! Decode each json field recursive.
@ -39,7 +45,8 @@ class XssSanitizer
} else {
$input = strip_tags($input);
}
});
};
\array_walk($inputs, $cleanInput);
$request->merge($inputs);
return $next($request);
}

View file

@ -40,6 +40,9 @@ class StoreTicket extends FormRequest
]);
}
}
$this->merge([
'labels' => $this->labels ?? []
]);
}

View file

@ -79,11 +79,11 @@ Route::middleware('auth:web')->group(function () {
Route::resource('labels', LabelController::class)->except('show');
Route::resource('brands', BrandController::class);
Route::resource('sites', SiteController::class)
->withoutMiddleware('xss')
->middleware('xss:description,todo');
->withoutMiddleware('htmlsanitize')
->middleware('htmlsanitize:description,todo');
Route::resource('projects', ProjectController::class)
->withoutMiddleware('xss')
->middleware('xss:description,todo');
->withoutMiddleware('htmlsanitize')
->middleware('htmlsanitize:description,todo');
Route::resource('projects.macro_markers', MarkerController::class)
->parameters([
'macro_markers' => 'marker'
@ -117,9 +117,13 @@ Route::middleware('auth:web')->group(function () {
// * LOGS and Files
Route::resource('logs', LogController::class)->only('index');
Route::resource('files', FileController::class)->only('index');
Route::resource('projects.logs', LogController::class);
Route::resource('projects.logs', LogController::class)
->withoutMiddleware('htmlsanitize')
->middleware('htmlsanitize:entry');
Route::resource('projects.files', FileController::class);
Route::resource('sites.logs', LogController::class);
Route::resource('sites.logs', LogController::class)
->withoutMiddleware('htmlsanitize')
->middleware('htmlsanitize:entry');
Route::resource('sites.files', FileController::class);
// * INVOICES