JavaScript/JPEG polyglot adalah file yang merupakan gabungan dari file gambar JPEG yang valid dan file JavaScript yang valid. Penyerang dapat mengeksploitasi kerentanan pada aplikasi web yang memproses atau menampilkan file gambar sehingga menjalankan kode JavaScript yang disisipkan dalam gambar tersebut. Serangan semacam ini sangat berbahaya jika aplikasi web tidak menangani unggahan file atau tidak menyaring input dengan benar.
Cara kerja serangan memanfaatkan XSS dengan JavaScript/JPEG Polyglot
Mencegah XSS dengan Laravel 10
Laravel menyediakan berbagai fitur bawaan dan praktik terbaik untuk membantu mencegah serangan XSS, termasuk yang melibatkan file polyglot. Berikut adalah cara mengantisipasi dan mengurangi risiko ini:
script php laravel :
$request->validate([
'image' => 'required|mimes:jpeg,jpg,png|max:2048',
]);
script php laravel :
// Dalam middleware atau controller
public function setHeaders() {
header("Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none';");
}
script php laravel :
<img src="{{ asset('storage/' . $imagePath) }}" alt="Image">
script php laravel
$file = $request->file('image');
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, $file->getRealPath());
finfo_close($finfo);
if ($mimeType !== 'image/jpeg' && $mimeType !== 'image/png') {
// Tangani tipe file tidak valid
}
Contoh Implementasi dalam Laravel 10
Berikut adalah contoh dasar menangani unggahan gambar dengan aman dalam aplikasi Laravel 10:
script php laravel :
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class ImageController extends Controller
{
public function upload(Request $request)
{
$request->validate([
'image' => 'required|mimes:jpeg,jpg,png|max:2048',
]);
$file = $request->file('image');
// Validasi tipe file
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, $file->getRealPath());
finfo_close($finfo);
if (!in_array($mimeType, ['image/jpeg', 'image/png'])) {
return back()->withErrors(['image' => 'Tipe gambar tidak valid.']);
}
$path = $file->store('images', 'public');
return back()->with('status', 'Gambar berhasil diunggah!');
}
public function show($filename)
{
$path = storage_path('app/public/images/' . $filename);
if (!file_exists($path)) {
abort(404);
}
return response()->file($path);
}
}
Dengan mengimplementasikan praktik terbaik ini dan memanfaatkan fitur-fitur Laravel, Anda dapat secara signifikan mengurangi risiko serangan XSS yang melibatkan file polyglot JavaScript/JPEG dalam aplikasi Laravel 10 Anda.
Kami PT. Teltics Media memiliki pengalaman dan partner terkait keamanan siber, serta membangun aplikasi sesuai standar keamanan . Apabila Anda memiliki kebutuhan terkait keamanan siber (cyber security), jangan ragu untuk menghubungi kami. Tim kami siap memberikan solusi terbaik untuk Anda. Silahkan hubungi kami melalui halaman form contact us..