allowed_remote_hosts and allowed_remote_schemes configurations enable controlled integration with third-party media sources (e.g., CDNs, APIs) while mitigating SSRF risks.MediaUploader constructor now requires a MediaUploaderConfiguration object (not an array), necessitating updates to existing upload logic.ON_DUPLICATE_* constants are replaced with an enum (OnDuplicateBehaviour), requiring type adjustments.beforeSave() now accepts a Closure (type-safe), but this is a minor change.MediaUploader refactor.MediaUploader:
// Before (6.x)
$uploader = new MediaUploader($model, 'avatar', $request->file('avatar'), [
'disk' => 's3',
'tags' => ['profile'],
]);
// After (7.0+)
$config = new MediaUploaderConfiguration([
'disk' => 's3',
'tags' => ['profile'],
]);
$uploader = new MediaUploader($model, 'avatar', $request->file('avatar'), $config);
SvgSanitizer only run on SVG uploads).allowed_remote_hosts or forbidden_file_extensions may break legitimate workflows (e.g., blocking .zip uploads for document previews).script.php.jpg).SvgSanitizer may introduce latency for SVG uploads if not optimized (e.g., large SVGs with complex paths).ON_DUPLICATE_* usages to OnDuplicateBehaviour::SKIP/OnDuplicateBehaviour::REPLACE could cause runtime errors.. in paths) may break apps relying on literal dot characters in filenames (e.g., file.123.txt).SvgSanitizer sufficient, or are additional XSS protections needed (e.g., CSP headers)?allowed_remote_hosts be configured (e.g., whitelist specific domains)?MediaUploader instantiations with array configs? What’s the effort to refactor to MediaUploaderConfiguration?script.php.jpg is rejected.<script> tags.FormRequest to enforce forbidden extensions/MIME types).plank/laravel-mediable:^7.0 (upgrade from ^6.5).spatie/image (for variants, if still used).league/flysystem-aws-s3-v3 (for S3-specific optimizations).spatie/laravel-medialibrary).SvgSanitizer) unless absolutely necessary.Pre-Migration:
MediaUploader instantiations and usages of ON_DUPLICATE_* constants.beforeSave().media table dump + storage backup).Phased Upgrade:
config/mediable.php to include new security settings (e.g., forbidden_file_extensions, allowed_remote_hosts).'forbidden_file_extensions' => [
'php', 'exe', 'sh', 'zip', 'js', // Defaults + custom
],
'allowed_remote_hosts' => [
'*.trusted-cdn.com',
'api.example.com',
],
MediaUploader configs with MediaUploaderConfiguration:
# Use a script to automate this (e.g., Regex find/replace)
find app -type f -name "*.php" -exec sed -i 's/\(new MediaUploader\)(.*), \[/\1, new MediaUploaderConfiguration(\2/' {} +
ON_DUPLICATE_* usages:
// Before
$uploader->setOnDuplicateBehaviour(MediaUploader::ON_DUPLICATE_SKIP);
// After
$config->setOnDuplicateBehaviour(OnDuplicateBehaviour::SKIP);
beforeSave() callables to Closure:
$uploader->beforeSave(fn (UploadingFile $file) => $file->setCustomProperty('source', 'admin'));
http://192.168.1.1/evil.php, file.php.jpg).$svg = <<<SVG
<svg><script>alert('XSS')</script></svg>
SVG;
$file = new UploadingFile($svg, 'test.svg');
$uploader->upload($file); // Should strip <script>
mediable.log or custom logging).Post-Migration:
How can I help you explore Laravel packages today?