Безопасность и erlang

31 views
Skip to first unread message

Wolverrum

unread,
Dec 4, 2010, 6:42:50 AM12/4/10
to Erlang в России
Существуют ли полезные советы по защите erlang-приложений от внешних
атак?

Дмитрий Омелечко

unread,
Dec 4, 2010, 6:54:38 AM12/4/10
to erlang-...@googlegroups.com
это каких, например? Самая страшная "атака" на виртуалку это кривой
linked-in драйвер.

4 декабря 2010 г. 13:42 пользователь Wolverrum <wolv...@gmail.com> написал:


> Существуют ли полезные советы по защите erlang-приложений от внешних
> атак?
>

> --
> Страница рассылки: http://groups.google.com/group/erlang-russian
>  Jabber-конференция: erl...@conference.jabber.ru
>  Новости: http://erlanger.ru
> Написать письмо: erlang-...@googlegroups.com
> Отписаться: erlang-russia...@googlegroups.com
>

Wolverrum

unread,
Dec 4, 2010, 7:30:12 AM12/4/10
to Erlang в России
Я в смысле: что можно словить, если выставить веб-приложение на erlang
"голым задом" в интернет, и можно ли этого как-то избежать (как и чем
прикрывать этот "голый зад").

Из того, чт я пока нашел:
http://writingcoding.blogspot.com/2007/05/erlang-cons.html ("Security
Another complaint is Erlang's security model...." и далее по тексту)
http://pokingarounderlang.wordpress.com/2009/01/18/erlang-web-security/
выходит, что словить можно довольно много всякого.


On 4 дек, 13:54, Дмитрий Омелечко <dvar...@gmail.com> wrote:
> это каких, например? Самая страшная "атака" на виртуалку это кривой
> linked-in драйвер.
>

> 4 декабря 2010 г. 13:42 пользователь Wolverrum <wolver...@gmail.com> написал:

Max Lapshin

unread,
Dec 4, 2010, 7:32:07 AM12/4/10
to erlang-...@googlegroups.com
Может я был невнимателен, но я увидел пару ссылок на ppt (а как вообще
можно доверять информации, распространяемой в PowerPoint??) и прочие
общие слова про «анатомию веб-сервиса» и выводы: «эрланг дырявый и
надо всё переделывать».

В чём проблемы то?

Wolverrum

unread,
Dec 4, 2010, 8:08:52 AM12/4/10
to Erlang в России
> В чём проблемы то?
Проектируется система, оперирующая довольно чувствительными данными.
Хочется, как ни странно, чувства защищенности. В принципе, оно есть,
но выстроено на личных ощущениях - хотелось, вот, удостовериться, что
они не лгут.

Dmitry Belyaev

unread,
Dec 4, 2010, 4:34:38 PM12/4/10
to erlang-...@googlegroups.com
Что-то все очень общо.
Какие именно вопросы с "выставлением эрланга наружу"?

Хотите по инету подключать ноды? Нет?

Все остальные проблемы - это проблемы конкретной реализации приложения,
а не эрланга.
Как работать с сетью, как кластеризоваться и т.д. Эрланг упрощает жизнь,
но думать, как реализовывать всё-равно нужно.

Dmitry Belyaev

Max Lapshin

unread,
Dec 4, 2010, 4:39:44 PM12/4/10
to erlang-...@googlegroups.com
2010/12/5 Dmitry Belyaev <rumata...@nm.ru>:

> Что-то все очень общо.
> Какие именно вопросы с "выставлением эрланга наружу"?
>
> Хотите по инету подключать ноды? Нет?
>
> Все остальные проблемы - это проблемы конкретной реализации приложения, а не
> эрланга.

Ага. Как жуткая подстава с filename:join. Кто бы мог подумать, что эта
функция с легкостью выбрасывает первый аргумент, если второй
начинается со слеша.

Valentin Nechayev

unread,
Dec 5, 2010, 2:16:46 AM12/5/10
to erlang-...@googlegroups.com
2010/12/4 Wolverrum <wolv...@gmail.com>:

Не думаю, что проблемы безопасности Erlang будут в этом плане
отличаться от проблем безопасности любой другой реализации на языке
схожих свойств (динамическая типизация, отсутствие прямого управления
памятью). Можно не бояться переполнений буферов, но надо продолжать
следить за квотингом и не допускать XSS.

Пожалуй, самое потенциально опасное свойство здесь - тотальное доверие
в кластере.

--
-netch-

Valentin Nechayev

unread,
Dec 5, 2010, 2:17:58 AM12/5/10
to erlang-...@googlegroups.com
2010/12/4 Max Lapshin <max.l...@gmail.com>:

>> Все остальные проблемы - это проблемы конкретной реализации приложения, а не
>> эрланга.
>
> Ага. Как жуткая подстава с filename:join. Кто бы мог подумать, что эта
> функция с легкостью выбрасывает первый аргумент, если второй
> начинается со слеша.

При том, что это чёткими словами английским по фоновому записано в
описании функции, причём не заныкано ХЗ где, а во втором же
предложении основного описания?

--
-netch-

Max Lapshin

unread,
Dec 5, 2010, 5:03:28 AM12/5/10
to erlang-...@googlegroups.com
2010/12/5 Valentin Nechayev <net...@gmail.com>:

>
> При том, что это чёткими словами английским по фоновому записано в
> описании функции, причём не заныкано ХЗ где, а во втором же
> предложении основного описания?
>

И всё же. Не нашлось ни одного человека, который бы ожидал такого
подлого поведения.

Alexey Veselovsky

unread,
Dec 5, 2010, 6:40:20 AM12/5/10
to erlang-...@googlegroups.com
> И всё же. Не нашлось ни одного человека, который бы ожидал такого
> подлого поведения.

Они просто не высказывались :-)

Valentin Nechayev

unread,
Dec 5, 2010, 7:06:42 AM12/5/10
to erlang-...@googlegroups.com
2010/12/5 Alexey Veselovsky <alexey.v...@gmail.com>:

>> И всё же. Не нашлось ни одного человека, который бы ожидал такого
>> подлого поведения.
>
> Они просто не высказывались :-)

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

Итого - filename:join() непригодна для использования, когда пути
поступают извне и должны быть ограничены только известным набором. По
крайней мере в текущем виде после неё ещё надо контролировать, что
получилось (может, проверить на вхождение в одно из известных
деревьев).

--
-netch-

Anton Fedorov

unread,
Dec 5, 2010, 7:08:55 AM12/5/10
to Valentin Nechayev
Hello, Valentin.

Your wrote 5 О©╫О©╫О©╫О©╫О©╫О©╫О©╫ 2010 О©╫. 18:06:42:

VN> О©╫О©╫О©╫О©╫О©╫ - filename:join() О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫
VN> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫
VN> О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫её О©╫щё О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫
VN> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
VN> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫).

О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫сё, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ join'О©╫ c "./"

--
Regards,
Anton Fedorov
Call2ru service
E-Mail: datac...@call2ru.com
Jabber: datac...@call2ru.com
ICQ: 272-35-262
Mobile: +7-913-925-7974 [SMS 24h, Call 05:00-19:00 MSKT (GMT+3)]

Valentin Nechayev

unread,
Dec 5, 2010, 7:12:11 AM12/5/10
to erlang-...@googlegroups.com
2010/12/5 Anton Fedorov <datac...@call2ru.com>:
> Hello, Valentin.
>
> Your wrote 5 декабря 2010 г. 18:06:42:
>
> VN> Итого - filename:join() непригодна для использования, когда пути
> VN> поступают извне и должны быть ограничены только известным набором. По
> VN> крайней мере в текущем виде после неё ещё надо контролировать, что
> VN> получилось (может, проверить на вхождение в одно из известных
> VN> деревьев).
>
> префиксировать всё, скармливаемое join'у c "./"

Тоже вариант. (Но - кроме первого элемента)

--
-netch-

Max Lapshin

unread,
Dec 5, 2010, 7:26:46 AM12/5/10
to erlang-...@googlegroups.com
2010/12/5 Valentin Nechayev <net...@gmail.com>:

> Вопрос спорный. С одной стороны, странно использовать средство, не
> прочитав по нему даже столь крошечный кусок документации, как описание
> функции.

Я привык к руби и рельсам, где все функции и методы ведут себя так,
как написаны, очевидным способом.

filename:join конечно же нельзя использовать для обработки
пользовательских данных, но ещё и по другим причинам: не вырезает ".."

Alexey Veselovsky

unread,
Dec 5, 2010, 7:42:21 AM12/5/10
to erlang-...@googlegroups.com
рельсы это вёб, а ерланг это телеком. по телефону довольно сложно
указать путь к файлу :-)

Max Lapshin

unread,
Dec 5, 2010, 7:53:50 AM12/5/10
to erlang-...@googlegroups.com
2010/12/5 Alexey Veselovsky <alexey.v...@gmail.com>:

> рельсы это вёб, а ерланг это телеком. по телефону довольно сложно
> указать путь к файлу :-)

Я не понимаю о чём ты сейчас говоришь

Alexey Veselovsky

unread,
Dec 5, 2010, 7:58:22 AM12/5/10
to erlang-...@googlegroups.com
> Я не понимаю о чём ты сейчас говоришь

В уютненьком телекоме поведение filename:join не приводит к наличию уязвимости.

Max Lapshin

unread,
Dec 5, 2010, 7:59:08 AM12/5/10
to erlang-...@googlegroups.com
2010/12/5 Alexey Veselovsky <alexey.v...@gmail.com>:

>> Я не понимаю о чём ты сейчас говоришь
>
> В уютненьком телекоме поведение filename:join не приводит к наличию уязвимости.
>

Если вкратце, то не верю.

Alexey Veselovsky

unread,
Dec 5, 2010, 8:01:11 AM12/5/10
to erlang-...@googlegroups.com
>> В уютненьком телекоме поведение filename:join не приводит к наличию уязвимости.
> Если вкратце, то не верю.
Каким образом это может вылезти в виде уязвимости? В телекомах вообще
файлами не оперируют. Т.е. разные узлы при общении друг с другом не
оперируют таким понятием как файл, и, тем более, как какой-то там
путь.

Max Lapshin

unread,
Dec 5, 2010, 8:07:44 AM12/5/10
to erlang-...@googlegroups.com
2010/12/5 Alexey Veselovsky <alexey.v...@gmail.com>:

Я потому и написал «не верю», а не «ты неправ», что сам с
изолированными, живущими вне интернета станциями никогда не работал,
да и нет мне дела до их жизни. Но знаю, что больше ни в одном API не
встречал такой неочевидной, хотя и описанной ситуации. Это и удивило.

Dmitry Vasiliev

unread,
Dec 5, 2010, 8:33:19 AM12/5/10
to erlang-...@googlegroups.com
05.12.2010 16:07, Max Lapshin О©╫О©╫О©╫О©╫О©╫:
> 2010/12/5 Alexey Veselovsky<alexey.v...@gmail.com>:
>>>> О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ filename:join О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
>>> О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫.
>> О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫? О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫
>> О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫.О©╫. О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫
>> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫, О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫-О©╫О©╫ О©╫О©╫О©╫

>> О©╫О©╫О©╫О©╫.
>
> О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫<<О©╫О©╫ О©╫О©╫О©╫О©╫>>, О©╫ О©╫О©╫<<О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫>>, О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫,
> О©╫О©╫ О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫. О©╫О©╫ О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ API О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

О©╫ Python os.path.join О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫:

"Join one or more path components intelligently. If any component is an
absolute path, all previous components (on Windows, including the
previous drive letter, if there was one) are thrown away, and joining
continues."

О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ Windows)?

--
Dmitry Vasiliev <dima at hlabs.org>
http://hlabs.org
http://twitter.com/hdima

Max Lapshin

unread,
Dec 5, 2010, 8:35:33 AM12/5/10
to erlang-...@googlegroups.com
>
> Какие еще есть предложения по соединению двух абсолютных путей (тем более на
> Windows)?
>

У меня нет и не может быть никаких предложений по поводу виндовс, но я
действительно не понимаю _зачем_ такая логика? Где хоть одна причина
пользоваться path.join вместо строковой конкатенации?

Dmitry Vasiliev

unread,
Dec 5, 2010, 9:49:16 AM12/5/10
to erlang-...@googlegroups.com
05.12.2010 16:35, Max Lapshin О©╫О©╫О©╫О©╫О©╫:

>> О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫
>> Windows)?
>
> О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ _О©╫О©╫О©╫О©╫О©╫_ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫? О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ path.join О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫?

О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ - filename:join/os.path.join О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ *О©╫О©╫О©╫О©╫О©╫О©╫О©╫* О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

JLarky

unread,
Dec 5, 2010, 11:56:36 AM12/5/10
to erlang-...@googlegroups.com
зачем? в оффтопике пути написанные в виде c:/bla/bla работают точно так же как и c:\bla\bla, если нет разницы, то зачем городить лишние сущности и пользоваться обратным слешем?

2010/12/5 Dmitry Vasiliev <di...@hlabs.org>
05.12.2010 16:35, Max Lapshin пишет:
Основная причина - filename:join/os.path.join при объединении элементов пути используют правила *текущей* системы.


--
Dmitry Vasiliev <dima at hlabs.org>
http://hlabs.org
http://twitter.com/hdima

--

Dmitry Vasiliev

unread,
Dec 5, 2010, 1:46:10 PM12/5/10
to erlang-...@googlegroups.com
05.12.2010 19:56, JLarky О©╫О©╫О©╫О©╫О©╫:
> О©╫О©╫О©╫О©╫О©╫? О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫ c:/bla/bla О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫
> О©╫О©╫ О©╫О©╫О©╫ О©╫ c:\bla\bla, О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
> О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫?

О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫? О©╫О©╫О©╫О©╫О©╫О©╫О©╫ filename:join О©╫О©╫О©╫
win32 О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫,
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫). О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, filename:join - О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫
О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫.

Max Lapshin

unread,
Dec 5, 2010, 1:48:53 PM12/5/10
to erlang-...@googlegroups.com
2010/12/5 Dmitry Vasiliev <di...@hlabs.org>:

> путей). И самое главное, filename:join - это абстрактный интерфейс,
> скрывающий ненужные в большинстве случаев детали и улучшающий читаемость кода.

Да какие детали он скрывает?? Я не могу представить себе ни единого
места, где я бы воспользовался _таким_ filename:join
Куда он нужен?

Maxim Treskin

unread,
Dec 5, 2010, 1:54:41 PM12/5/10
to erlang-...@googlegroups.com
Приходит в голову один кейс, когда первым параметром передаётся имя какой-то фиксированной директории, а вторым параметром — какой-то путь, который может быть относительным, тогда он джойнится к директории, или абсолютным, тогда он и используется. Похоже на работу утилиты ls, отсчитывающую путь от CWD или абсолютно. Но вот где этот кейс применить не в шелл-скриптах — не придумывается. В общем, такая функция не нужна.

2010/12/6 Max Lapshin <max.l...@gmail.com>
--
Страница рассылки: http://groups.google.com/group/erlang-russian
 Jabber-конференция: erl...@conference.jabber.ru
 Новости: http://erlanger.ru
Написать письмо: erlang-...@googlegroups.com
Отписаться: erlang-russia...@googlegroups.com



--
Maxim Treskin

Dmitry Vasiliev

unread,
Dec 5, 2010, 2:10:19 PM12/5/10
to erlang-...@googlegroups.com
05.12.2010 21:48, Max Lapshin О©╫О©╫О©╫О©╫О©╫:
> 2010/12/5 Dmitry Vasiliev<di...@hlabs.org>:

>
>> О©╫О©╫О©╫О©╫О©╫). О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, filename:join - О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
>> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫
>> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫.
>
> О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫??

О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫:

https://github.com/erlang/otp/blob/dev/lib/stdlib/src/filename.erl#L303

> О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
> _О©╫О©╫О©╫О©╫О©╫_ filename:join О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫?

О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫/О©╫О©╫О©╫О©╫О©╫О©╫.

О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫О©╫ О©╫О©╫О©╫О©╫-О©╫О©╫ О©╫О©╫О©╫-О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
filename:join О©╫О©╫О©╫ О©╫О©╫О©╫О©╫-О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. :-) О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫-О©╫О©╫О©╫О©╫О©╫О©╫/О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

Alexey Veselovsky

unread,
Dec 5, 2010, 2:15:18 PM12/5/10
to erlang-...@googlegroups.com
> Не очень понятна суть треда - как будь-то кто-то заставляет использовать
> filename:join для чего-то непотребного. :-) Если кажется, что функция
> неверно работает можно послать баг-репорт/патч. Если не хочется использовать
> - можно не использовать.

Суть проста -- это ж воскресный холивор!

Anton Fedorov

unread,
Dec 5, 2010, 2:18:34 PM12/5/10
to Maxim Treskin
Hello, Maxim.

Your wrote 6 О©╫О©╫О©╫О©╫О©╫О©╫О©╫ 2010 О©╫. 0:54:41:

MT> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
MT> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫-О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫
MT> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫-О©╫О©╫ О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫,
MT> О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫
MT> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
О©╫О©╫О©╫О©╫мёО©╫ О©╫О©╫О©╫О©╫: О©╫О©╫О©╫О©╫ DocumentRoot. О©╫ О©╫сё О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫.
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ -- О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫; О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ -- О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

Max Lapshin

unread,
Dec 5, 2010, 2:29:31 PM12/5/10
to erlang-...@googlegroups.com
> Не очень понятна суть треда - как будь-то кто-то заставляет использовать
> filename:join для чего-то непотребного. :-)

Ну как же. Ошибки безопасности возникают зачастую там, где _ожидали_
что всё будет хорошо, а стало всё плохо.

char a[6];
a[6] = 5;


Я был очень неприятно удивлен, когда узнал про это поведение
filename:join, которое заставило меня выкинуть эту функцию из всего
кода erlyvideo.
А у кого-то могли быть утеряны данные.

Max Lapshin

unread,
Dec 5, 2010, 4:59:31 PM12/5/10
to erlang-...@googlegroups.com
Парни, для конфигов напоминаю про file:path_consult, который ведет
себя как раз ища конфиг в списке путей. Это логичная и удобная
функция.

Dmitry Vasiliev

unread,
Dec 5, 2010, 8:56:06 PM12/5/10
to erlang-...@googlegroups.com
05.12.2010 22:29, Max Lapshin О©╫О©╫О©╫О©╫О©╫:

>> О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫О©╫ О©╫О©╫О©╫О©╫-О©╫О©╫ О©╫О©╫О©╫-О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
>> filename:join О©╫О©╫О©╫ О©╫О©╫О©╫О©╫-О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. :-)
>
> О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫. О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫, О©╫О©╫О©╫ _О©╫О©╫О©╫О©╫О©╫О©╫О©╫_
> О©╫О©╫О©╫ О©╫сё О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫сё О©╫О©╫О©╫О©╫О©╫.

>
> char a[6];
> a[6] = 5;
>
>
> О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
> filename:join, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫ erlyvideo.
> О©╫ О©╫ О©╫О©╫О©╫О©╫-О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫.

О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫
О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ filename:join. О©╫О©╫О©╫О©╫О©╫О©╫О©╫ filename:join О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫
*О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫* О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫-О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫.

О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫ filename:join, О©╫О©╫
О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫:

["/files", "/etc/passwd"]
["/files", "../etc/passwd"]
["/files", "filename/../../etc/passwd"]

О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫-О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ filename:join О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫? О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ *О©╫О©╫* О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫ string:join О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫.

Eugene Lisitsky

unread,
Dec 6, 2010, 9:26:27 AM12/6/10
to erlang-...@googlegroups.com
Чувство защищенности удобнее всего покупать у крупного поставщика оптом. :)
Те же самые работы, но сделанные крупной именитой компанией-разработчком, которая возьмет на себя и менеджмент, и эмоции клиента, будут стоить чуть дороже - всего на 500%. :)

4 декабря 2010 г. 16:08 пользователь Wolverrum <wolv...@gmail.com> написал:
> В чём проблемы то?
Проектируется система, оперирующая довольно чувствительными данными.
Хочется, как ни странно, чувства защищенности. В принципе, оно есть,
но выстроено на личных ощущениях - хотелось, вот, удостовериться, что
они не лгут.


--
Страница рассылки: http://groups.google.com/group/erlang-russian
 Jabber-конференция: erl...@conference.jabber.ru
 Новости: http://erlanger.ru
Написать письмо: erlang-...@googlegroups.com
Отписаться: erlang-russia...@googlegroups.com



--
Yours,
Eugene Lisitsky

Max Lapshin

unread,
Dec 6, 2010, 10:08:57 AM12/6/10
to erlang-...@googlegroups.com
2010/12/6 Eugene Lisitsky <lisi...@gmail.com>:

> Чувство защищенности удобнее всего покупать у крупного поставщика оптом. :)
> Те же самые работы, но сделанные крупной именитой компанией-разработчком,
> которая возьмет на себя и менеджмент, и эмоции клиента, будут стоить чуть
> дороже - всего на 500%. :)
>

Всего на 500% — это без гарантий защищенности. Только с чувством защищенности.

Reply all
Reply to author
Forward
0 new messages