TL; DR Tidak, Anda tidak 100% aman. Atau dengan kata lain, pikirkan dua kali. ;)
Jangan mengeksekusi cuplikan kode tanpa memahami dasar-dasarnya. Gunakan man
untuk mempelajari lebih lanjut tentang perintah atau program. Gunakan Google atau portal pencarian lain jika Anda tidak mengerti. Dan jika Anda masih ragu, jangan jalankan kode.
Apakah kamu percaya aku? Lalu lari:
man man
Ok, tidak berbahaya, Anda melihat halaman manual man
Tetapi bagaimana dengan kode di bawah ini, apakah Anda mempercayai saya?
$(perl -MMIME::Base64 -0777ne 'print decode_base64($_)' <<< "ZWNobyAnQk9PSCEnCg==")
Tidak? Ide bagus. Mari uraikan kodenya:
perl
Penerjemah bahasa Perl
-MMIME::Base64
Pengkodean dan decoding string base64
-0777ne
-0777
- Mengubah pemisah baris ke undef, membiarkan kita untuk menyeruput file, memberi makan semua baris ke Perl dalam satu pergi.
-e
- flag (eksekusi) adalah yang memungkinkan kita untuk menentukan kode Perl yang ingin kita jalankan tepat di baris perintah.
-n
- Umpan input ke Perl baris demi baris.
'print decode_base64($_)'
- Mendekode string, string disimpan dalam $_
.
"ZWNobyAnQk9PSCEnCg=="
- Dan ini? Apa ini?
Mari kita mulai tes.
Kita tahu, itu seperti base64 dan terlihat dikodekan. Oleh karena itu, decode string dengan:
base64 --decode <<< "ZWNobyAnQk9PSCEnCg=="
Dan hasilnya adalah ... ok, tidak terlalu berbahaya:
echo 'BOOH!'
Sekarang, kita bisa melakukan hal yang sama dengan perl
perl -MMIME::Base64 -0777ne 'print decode_base64($_)' <<< "ZWNobyAnQk9PSCEnCg=="
Dan hasilnya, sungguh mengejutkan:
echo 'BOOH!'
Tetapi apakah itu berbahaya? Ini berbahaya:
$(…)
Konstruk ini mengeksekusi output dari perintah dalam kurung bundar.
Mari kita coba, apakah Anda percaya padaku?
$(perl -MMIME::Base64 -0777ne 'print decode_base64($_)' <<< "ZWNobyAnQk9PSCEnCg==")
'BOOH!'
Dan tentang apa
c3VkbyBraWxsYWxsIG5hdXRpbHVzCg==
Cobalah ... Apakah Anda percaya padaku?