Eksploitasi dalam parameter skrip bash mungkin?

9

Saya ingin meneruskan alamat email dari formulir web ke skrip bash. Saya menggunakan regex berikut:

/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}/

Apakah ini cukup? Atau bisakah seseorang menanamkan eksploitasi?

Script dipanggil dari PHP:

system('/usr/local/bin/script.sh "$email"');
chris
sumber
4
Bagus bahkan untuk bertanya. Saya tidak melihat potensi eksploitasi tetapi Anda dapat menolak beberapa alamat email yang valid dan menerima beberapa alamat yang tidak valid. Oh — dan Anda harus berlabuh di regex Anda .
Wildcard
1
@ Kartu Memori Memang kurangnya penahan membuat regexp tidak berguna sebagai tes keamanan!
Gilles 'SANGAT berhenti menjadi jahat'
Ini bisa menjadi alamat email yang valid "the doctor"@gallifrey.com. Perhatikan ruang yang dikutip dalam komponen nama pengguna.
roaima
pada titik apa Anda khawatir tentang eksploitasi? Baris subjek mengatakan 'bash', demikian juga kekhawatiran seputar ekspansi sambil mengirimkan $ email sebagai argumen (dikutip) ke script.sh, atau script.sh yang menangani nilai yang diteruskan, atau ketatnya (mungkin berbasis PHP) ) regex, atau ???
Jeff Schaller
Tidak jelas bagaimana regexp digunakan di dalam skrip Anda. Untuk analisis yang baik, berikan bagian yang relevan dari skrip Anda.
jofel

Jawaban:

1

Anda dapat membersihkan dan memvalidasi alamat email dalam PHP, yang akan lebih cepat dan lebih aman daripada memanggil skrip shell. Memanggil skrip shell dengan data yang tidak bersih dari layanan web hanya akan menambah hal lain yang dapat dipecahkan.

$sanitized_email = filter_var($email, FILTER_SANITIZE_EMAIL);
if (filter_var($sanitized_email, FILTER_VALIDATE_EMAIL)) {
    echo "This sanitized email address is considered valid.\n";
    echo "Before: $email\n";
    echo "After:  $sanitized_email\n";    
} else {
    echo "This sanitized email address is considered invalid.\n";
}

Contoh di atas diadaptasi dari contoh di situs PHP.net .

Kusalananda
sumber