Komut satırından gelen tek satırların security implications numaralı perl
çalıştırılıyor.Perl'i komut satırından çalışırken her zaman açık üç argüman formu kullanabilir miyiz?
$ perl -pe '' 'uname|'
Linux
Veya daha tehlikeli:
sorun seçenek dosyalarının adı özel karakterler içeriyor öylesine, perl
beklendiği gibi çalışmıyor, open
iki argüman formu kullanın elmas operatörü <>
, tetikleyecek -n/-p
olmasıdır >
ile başlayan dosyalar, >file
gibi. Bu durumda, dosya kesilecektir. bu konuyla etrafında çalışma için
, biz: CPAN
- kullanın ARGV::readonly modülü.
- kendimiz tarafından
ARGV::readonly
modül gibi özelliğini uygulayın:
perl -pe 'BEGIN{$_.="\0" for @ARGV} ...' ./*
- Kullanım
-i
seçeneği,perl
dosya işleme konulmasından önce var olup olmadığını kontrol edecektir olarak. - Tonlama modunu etkinleştirmek için
-T
seçeneğini kullanın.
Tüm çözümlerin bu sorunu çözebileceğini düşünüyorum, ancak bunların yan etkileri de var. perl
'u zorlayabilirsek, her zaman open
argüman formunu kullanın, daha iyi bir çözüm olacaktır.
Bunu yapabiliriz, zorla perl
her zaman open
argüman formunu kullanın?
Not
(tabii ki) biz her zaman Perl komut open
üç argüman formu kullanabilirsiniz, çünkü komut satırından perl
bir gömlekleri çalıştırırken soru yalnızca durum için geçerlidir.
alias perl='perl -MARGV::readonly'
Ya da sadece "kötü" oneliners yazarak insanları eğitmek:
demek istediğini anlıyorum ama 'perl -pe 'Uname |' '' çıktısı nasıl görmüyorum' insanlar ne beklenir değildir ve olurdu büyük tehlikenin "perl -pe" 1 ""> myfile "olduğunu düşündüm. Bence bütün komut satırı giriş dosyaları, her zaman '<' olarak ayarlanmış olan ikinci parametre ile üç parametreli form kullanılarak açılmalıdır. – Borodin
@Borodin: 'uname | '' yerine geçerli bir dosya adıdır, yerine' uname 'komutu çalıştırılır ve' perl 'olarak adlandırılır. Ve bu komutun rm -rf $ HOME' olabileceğini görüntüleme. Evet, -i 'seçeneği dışında, dosyayı yerinde düzenlemek istediğinizde. Daha fazla bilgi için soruma verdiğim bağlantıyı okuyabilirsiniz. – cuonglm