TL; DR Không, bạn không an toàn 100%. Hoặc với những từ khác, suy nghĩ hai lần. ;)
Đừng thực thi các đoạn mã mà không hiểu những điều cơ bản. Sử dụng man
để tìm hiểu thêm về một lệnh hoặc một chương trình. Sử dụng Google hoặc một cổng tìm kiếm khác nếu bạn không hiểu. Và nếu bạn vẫn nghi ngờ, chỉ cần không thực thi mã.
Bạn có tin tôi không? Sau đó chạy:
man man
Ok, không nguy hiểm, bạn thấy trang của man
Nhưng những gì về mã dưới đây, bạn có tin tưởng tôi?
$(perl -MMIME::Base64 -0777ne 'print decode_base64($_)' <<< "ZWNobyAnQk9PSCEnCg==")
Không phải? Ý tưởng tốt. Hãy phân tích mã:
perl
Trình thông dịch ngôn ngữ Perl
-MMIME::Base64
Mã hóa và giải mã chuỗi base64
-0777ne
-0777
- Thay đổi dấu phân cách dòng thành undef, cho phép chúng tôi xóa tệp, cho tất cả các dòng vào Perl trong một lần.
-e
- (thực thi) cờ là thứ cho phép chúng ta chỉ định mã Perl mà chúng ta muốn chạy ngay trên dòng lệnh.
-n
- Đưa đầu vào vào Perl theo từng dòng.
'print decode_base64($_)'
- Giải mã một chuỗi, chuỗi được lưu vào $_
.
"ZWNobyAnQk9PSCEnCg=="
- Và cái này? Cái gì thế này?
Hãy bắt đầu một bài kiểm tra.
Chúng tôi biết, nó giống như base64 và nó được mã hóa. Do đó giải mã chuỗi bằng:
base64 --decode <<< "ZWNobyAnQk9PSCEnCg=="
Và đầu ra là ok ok, không thực sự nguy hiểm:
echo 'BOOH!'
Bây giờ, chúng ta có thể làm tương tự với perl
perl -MMIME::Base64 -0777ne 'print decode_base64($_)' <<< "ZWNobyAnQk9PSCEnCg=="
Và đầu ra là, thật bất ngờ:
echo 'BOOH!'
Nhưng nó có nguy hiểm không? Điều này nguy hiểm:
$(…)
Cấu trúc này thực thi đầu ra của các lệnh trong ngoặc tròn.
Hãy thử xem, bạn có tin tôi không?
$(perl -MMIME::Base64 -0777ne 'print decode_base64($_)' <<< "ZWNobyAnQk9PSCEnCg==")
'SÁCH!'
Và những gì về
c3VkbyBraWxsYWxsIG5hdXRpbHVzCg==
Hãy dùng thử. Bạn có tin tưởng tôi không?