[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Нужен ли bash



On 2008.10.01 at 17:57:01 +0300, Aleksey Cheusov wrote:

>  >> любом скриптовом языке. Ни в tcl ни в perl разыменование переменной не
>  >> смотрит, пуста строка, или нет. И проблема, как следствие та же.
> 
> > Вопрос не в том, пуста строка или нет, а в том, будет ли она передана
> > в выполняемую внешнюю команду как один параметр, или как произвольный
> > набор таковых.
> В целом я понимаю проблему, но в частностях - не вижу никакой разницы.
> 
> 
> 0 ~>cat ~/tmp/1.perl
> $str = "echo trtrtr; echo brbrbr";
> system("$str");

Я сказал СПИСКОВУЮ форму system.

Если там один параметр то оно вызывает shell и приехали.

Рассмотрим более реалистичный пример.

Допустим, мы ожидаем в строке имя файла и хотим его посмотреть. Для
определенности display. Злобный хакер подсовывает нам
вместо имени файла кострукцию "coolchildporn.jpg; rm -rf /".

Нет, это слишком жестоко. Пусть будет

"innocentpic.jpg; echo "Ha-Ha, you are hacked!"

Сравните результаты

$filename='innocentpic.jpg; echo "Ha-Ha, you are hacked!';
system display, $filename;
и 
system "display $filename";


В первом случае получаем 
display: unable to open file `innocentpic.jpg; echo "Ha-Ha, you are
hacked!"': No such file or directory.


Во втором "Ha-Ha, you are hacked!" на stdout.


> P.S.  До сих пор помню стоны товарищей, которые по работе писали на
> tcl "В этом ^%$^* языке" пустые строки пропадают". Это насчет передачи

Ну, Quoting hell в Tcl - это проблема известная. Лечится одним
единственным путем. Заменой кодера на заведомо исправного. Который перед
тем как начать писать на этом языке, читает man Tcl и осознает, что 
интерпретатор сделает ему ровно то, что там написано, и не более того.

Да, конечно, большая часть кодеров документацию не читают, а если
читают, то не пытаются понять и осознать, а смотрят только в примеры,
которые подгибают под свой случай напильником. В Tcl это, увы, не
работает.

Там надо соблюдать три (ну в 8.5 четыре) математически строгих правила.

-- 


Reply to: