LINUX.ORG.RU

Как безопасно включить скрипт в свою прогу?


0

0

Хочется чтобы пользователь мог писать некоторые скрипты для моей проги, ну т.е. приходи ему пара переменных, он по какой-то ему известной логике решает что с ними делает и возвращает третью переменную. Хочется дать ему для его логики какой-нить разумный язык, типа перла или руби, но при этом чтобы в нём не было всяких там fopen и прочей фигни, только работа с данными. Подскажите как это вообще делается? Не писать же из-за этого свой язык ))


bash, lua, java?

>но при этом чтобы в нём не было всяких там fopen и прочей фигни, только работа с данными.

а если они есть - какая разница?

generatorglukoff ★★
()

lisp, lua, python примеров у гугла можно много найти

UrbanSerj
()

у qt есть свой скриптинг - йавоскрипт

мне понравилось

Pi ★★★★★
()

А может, наоборот, только с fopen'ами и работать? Общаться со скриптом посредством пересылки текстовых данных через pipe, а то и web service замутить. И пусть на чем хочут на том и пишут?

gods-little-toy ★★★
()
Ответ на: комментарий от generatorglukoff

Такая что прога запускается на моем компе, соответственно мне надо то ли в chroot её сувать, то ли ещё как-то ограничивать...

Кстати сказать тот же Жаваскрипт вроде тоже умеет с файлами и сайтами общаться, а это мне не надо

JLarky
() автор топика

Ну вроде под ваше описание подходит bc.

>Не писать же из-за этого свой язык ))

А почему бы и нет? Берете тот же awk (исходиник доступны) и удаляется все, что повзоляет лезть к файлам/сокетам.

mky ★★★★★
()
Ответ на: комментарий от JLarky

>Кстати сказать тот же Жаваскрипт вроде тоже умеет с файлами и сайтами общаться, а это мне не надо

ну во-первых не правда, во-вторых вы отметаете вариант не рассмотрев его. ссзб

Pi ★★★★★
()
Ответ на: комментарий от mky

>А почему бы и нет? Берете тот же awk (исходиник доступны) и удаляется все, что повзоляет лезть к файлам/сокетам.

как создать шедевр? - взять кусок камня и удалить всё лишнее!

ты действительно свято веришь в сказанное? а суппортить как эту байду? отлеживать изменения в авк? а может проще вязть заточенную под это дело либу?

Pi ★★★★★
()

У всех разумных скриптовых языков есть возможность отрывать лишние функции при встраивании интерпретатора или выполнении кода eval-ом.

Для перла - perldoc Safe

Для lua нужно будет построить кастомный словарик при создании интерпретатора, вроде.

Ну и вообще, если пользователь сам прогу запускает и сам же плагины пишет (ну т.е. это что-то типа скриптов к Amarok или GIMP) - то это лишее ограничение. Вдруг эта самая "ему известная логика" потребует ввода от пользователя, или чтения конфигов?

anonymous
()
Ответ на: комментарий от UrbanSerj

>можно написать простенький dsl... будет наверное самым труЪ решением

а что это? :-[

>ну во-первых не правда, во-вторых вы отметаете вариант не рассмотрев его.

что такое яваскрипт я представляю из веб-дизайна... ну там этим яваскриптом можно делать точно и соединение с сервером и редактирование файлов.

>Для lua нужно будет построить кастомный словарик при создании интерпретатора, вроде.

ой, а можно подробней? Я глянул в официальный мануал по lua на первый взгляд там ничего вроде perl'овского safe нету.

>Ну и вообще, если пользователь сам прогу запускает и сам же плагины пишет

Если бы так... У меня пользователь присылает мне плагин, а я его выполняю.

JLarky
() автор топика
Ответ на: комментарий от JLarky

>>можно написать простенький dsl... будет наверное самым труЪ решением

>а что это? :-[

domain-specific language.. это как раз то что тебе нужно, т.е вактически язык с функционалом под конкретную задачу

UrbanSerj
()
Ответ на: комментарий от Pi

>ты действительно свято веришь в сказанное? а суппортить как эту байду? отлеживать изменения в авк?

gawk-3.1.6.tar.gz 25-Oct-2007 gawk-3.1.5.tar.gz 12-Aug-2005 gawk-3.1.4.tar.gz 02-Aug-2004 gawk-3.1.3.tar.gz 08-Jul-2003

Дейстительно, с ума сойти, каждый год новая версия...

Чем не понравился bc?

mky ★★★★★
()
Ответ на: комментарий от JLarky

> > Для lua нужно будет построить кастомный словарик при создании интерпретатора, вроде.

> ой, а можно подробней? Я глянул в официальный мануал по lua на первый взгляд там ничего вроде perl'овского safe нету.

Там все жестче и правильнее - там в скрипте доступно только то, что разрешил. Подробнее не расскажу, потому что сам из третьих рук, но вот тут есть пример:

http://www.debian-administration.org/articles/264

(поищи там слово sandbox, рядом кусок кода, из которого должно быть ясно многое)

anonymous
()
Ответ на: комментарий от mky

>Дейстительно, с ума сойти, каждый год новая версия...

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

с библиотеками в разы проще.

>Чем не понравился bc?

а я ничеко против бц не говорил

Pi ★★★★★
()
Ответ на: комментарий от tailgunner

да обходится, но только если специально обходить... Не гарантия, но лучше чем ничего. Тем более что заявленные топикстартером проблемы решает (отключает доступ к ФС и сокетам)

imp ★★
()
Ответ на: комментарий от Pi

>с библиотеками в разы проще.

Проще не лучше :) Так специальный человек будет постоянно смотреть сорцы awk, может багу какую найдет, пачт выпустит, FSF порадует...

А в целом я не совсем понял, чего хочет автор топика --- библиотеку или вызов обработчика скрипта через fork().

mky ★★★★★
()

любой встраиваемый язык позволяет задавать какие угодно ограничения. Как уже неоднократно упоминали - lua, scheme, javascript самые оптимальные варианты.

Legioner ★★★★★
()
Ответ на: комментарий от UrbanSerj

>domain-specific language.. это как раз то что тебе нужно, т.е вактически язык с функционалом под конкретную задачу

это звучит как-то слишком теоретически... этот эяык существут вообще или это просто такая хорошая и красивая абстракция?

>Дейстительно, с ума сойти, каждый год новая версия...

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

>Там все жестче и правильнее - там в скрипте доступно только то, что разрешил. Подробнее не расскажу, потому что сам из третьих рук, но вот тут есть пример:

По моим ощущениям луа со стандартной либой умеет общаться с файлами и делать os.execute("ls -lR /"); и та статья меня в этом не переубедила, а lua-config ничего не конфигурирует, а просто "allows you to determine useful information about the chosen version of lua running on the Debian GNU/Linux system in use"

>да обходится, но только если специально обходить... Не гарантия, но лучше чем ничего. Тем более что заявленные топикстартером проблемы решает (отключает доступ к ФС и сокетам)

Всё время когда есть возможность послать что-то выполняющееся на другой машине найдётся человек который захочет выполнить что-то своё ))

>А в целом я не совсем понял, чего хочет автор топика --- библиотеку или вызов обработчика скрипта через fork().

Я хочу решить такую задачу: есть определённые данные которые должны обрабатываться по логике пользователя, для этого я хочу дать ему удобный инструмент, как мне показалось для этого очень хорошо подходит lua, но так как выполнятся они будут на моей машине, то хочется себя оградить от слишком умных пользователей.

>любой встраиваемый язык позволяет задавать какие угодно ограничения. Как уже неоднократно упоминали - lua, scheme, javascript самые оптимальные варианты.

слышу эту фразу уже второй раз, но пока почему-то никто не сказал как это делать. Говорили только про перл и питон, а про lua, scheme, javascript ничего

JLarky
() автор топика
Ответ на: комментарий от JLarky

>это звучит как-то слишком теоретически... этот эяык существут вообще или это просто такая хорошая и красивая абстракция?

http://en.wikipedia.org/wiki/Domain_specific_language

на scheme пишется за пару-тройку часов, примеры есть в sicp

>Луа выглядит очень привлекательно, но я пока не очень понимаю как в ней делать ограничения...

если встраиваешь в c/c++, то:
lua_State *L = lua_open();

luaopen_io(L); // provides io.*
luaopen_base(L);
luaopen_table(L);
luaopen_string(L);
luaopen_math(L);
luaopen_loadlib(L);

просто указываешь какие библиотеки подключать

UrbanSerj
()
Ответ на: комментарий от JLarky

> что такое яваскрипт я представляю из веб-дизайна... ну там этим яваскриптом можно делать точно и соединение с сервером и редактирование файлов.

Бу-га-га. Если бы у джава-скрипта была бы возможность пописывать в локальную ФС исполняясь в браузере клиента - это было бы, пожалуй, самой крутой дырой столетия.

anonymous
()
Ответ на: комментарий от gaa

http://wiki.tcl.tk/4204 -- статья про создание безопасного интерпретатора tcl с оторванными функциями работы с файлами и подгрузки библиотек. Думаю, как раз то, что надо.

gaa ★★
()

вы не думали над тем, чтобы для разработки программ нанять-таки программиста?

mirage
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.