Uruchamianie perl
jednoosobowe z wiersza poleceń ma security implications.Czy możemy wymusić, aby perl zawsze używał trzech argumentów otwartych przy uruchamianiu z wiersza poleceń?
Problem polega na tym, że opcje -n/-p
wywołać operatora diament <>
, które wykorzystują dwa argumenty formę open
, więc z nazwy plików zawierają znaki specjalne, perl
nie działa zgodnie z oczekiwaniami:
$ perl -pe '' 'uname|'
Linux
lub więcej niebezpiecznych gdy nazwa pliku zaczyna się od >
, np. >file
. W takim przypadku plik zostanie obcięty.
Do prac wokół z tego problemu możemy:
- Zastosowanie ARGV::readonly moduł z CPAN.
- Wdrożenie funkcji, takich jak moduł
ARGV::readonly
przez Nas:
perl -pe 'BEGIN{$_.="\0" for @ARGV} ...' ./*
- Zastosowanie
-i
opcji, jakperl
sprawdzi plik istniał przed przetworzeniem go. - Użyj opcji
-T
, aby włączyć tryb taint.
Myślę, że wszystkie rozwiązania mogą rozwiązać ten problem, ale także mają swoje skutki uboczne. Jeśli będziemy w stanie wymusić perl
zawsze użyjemy tej argumentacji w postaci open
, będzie to lepsze rozwiązanie.
Zastanawiam się, czy możemy to zrobić, wymusić perl
zawsze używać argumentów z formularza open
?
Uwaga
Pytanie zastosowanie wyłącznie do przypadku, gdy uruchomiony perl
jeden wkładki z linii poleceń, ponieważ (oczywiście) zawsze możemy użyć trzy formy argument open
w skrypcie Perla.
rozumiem twój punkt widzenia, ale nie widzę w jaki sposób wyjście 'perl -pe„”„uname |”' nie jest to, co ludzie oczekują, i musiałby uważam, że większym niebezpieczeństwem jest "perl -pe" 1 ""> mójplik "'. Myślę, że wszystkie pliki wejściowe wiersza poleceń powinny zostać otwarte przy użyciu formularza z trzema parametrami, a drugi parametr zawsze ustawiony na '<'. – Borodin
@Borodin: ''uname |'' jest poprawną nazwą pliku, zamiast go otworzyć, polecenie 'uname' jest wykonywane i potokować do' perl'. I obrazując, że polecenie może być 'rm -rf $ HOME'. Tak, z wyjątkiem opcji "-i", jeśli chcesz edytować plik w miejscu. Możesz przeczytać link podany w moim pytaniu, aby uzyskać więcej szczegółów. – cuonglm