скрипты генерят скрипты

PhpGuest

Guest
скрипты генерят скрипты

Вот тут такие мысли прочитал, что плохо использовать такой подход, когда скрипт генерирует другой скрипт, а потом второй юзается.

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

гоша

Guest
а что тут плохого?
smarty вроде бы именно так и работает.
только кешировать надо.
 

Crazy

Developer
Это плохо тем, что у начинающих начинают путаться мозги (что тот тред и демонстрирует). Других принципиальных недостатков эта методика, называемая метапрограммированием, не имеет.
 

JVN

Guest
Re: скрипты генерят скрипты

Автор оригинала: PhpGuest
Вот тут такие мысли прочитал, что плохо использовать такой подход, когда скрипт генерирует другой скрипт, а потом второй юзается.
Плохо, потому что это потенциально опасная технология.
Зачем тебе это ?
 

Crazy

Developer
JVN, в чем суть ее принципиально большей опасности по сравнением с закачиванием на сервер самописных скриптов?
 

JVN

Guest
Автор оригинала: Crazy
JVN, в чем суть ее принципиально большей опасности по сравнением с закачиванием на сервер самописных скриптов?
Самописные скрипты создают опасность для сервера - это проблема админа.
Метапрограммирование делает потенциально уязвимым сам сайт, т.е. создает опасность для самих "самописцев".
 

PhpGuest

Guest
Автор оригинала: JVN
Самописные скрипты создают опасность для сервера - это проблема админа.
Метапрограммирование делает потенциально уязвимым сам сайт, т.е. создает опасность для самих "самописцев".
А можно примеры конкретной уязвимости? Я четсно говоря не совсем понимаю как сгенерированный скрипт может быть опастнее закаченного с ftp?
(единствееное что в голову приходит - при плохой организацци скрипта-генератора в результат генерации можно внедить чужой php код)
 

Crazy

Developer
Автор оригинала: JVN
Самописные скрипты создают опасность для сервера - это проблема админа. Метапрограммирование делает потенциально уязвимым сам сайт, т.е. создает опасность для самих "самописцев".
Прости, но это утверждением столь же голословно, что и предыдущее. Конкретика есть?

P.S. Дискуссии вот в таком духе мне неинтересны:

- Грузины лучше чем армяне!
- Чем лучше?
- Чем армяне.
 

JVN

Guest
Автор оригинала: PhpGuest
А можно примеры конкретной уязвимости?...
при плохой организацци скрипта-генератора в результат генерации можно внедить чужой php код)
Ты сам и привел пример конкретной уязвимости.
Твой генерируемый скрипт в какой-то части неизбежно будет зависеть от запроса клиента.
Иначе не понятно зачем применять такую технологию ? (Если, конечно, речь не идет о шаблонных движках).

2Crazy:
Конкретика - создание _дополнительных_ проблем с безопасностью самому себе.
 

Crazy

Developer
Автор оригинала: JVN
Твой генерируемый скрипт в какой-то части неизбежно будет зависеть от запроса клиента.
Исполнение скрипта вообще зависит от запроса клиента. В чем конкретно источник небезопасности?

Может скрипт из-за ошибки программиста уничтожить все записи в таблице? Может.

Может скрипт из-за ошибки сгенерировать другой скрипт, уничтожающий все записи в таблице? Может.

Может все это случиться при отсутствии ошибки? Не может. При любом запросе пользователя.

Так в чем конкретно разница?

Если, конечно, речь не идет о шаблонных движках
О! Я вижу, начинается подготовка пути к отступлению... :)

Конкретика - создание _дополнительных_ проблем с безопасностью самому себе.
Пока ты не назвал ни одну из этих дополнительных проблем. Спрашиваю в третий раз: ты в состоянии назвать конкретный пример или твоя точка зрения основывается исключительно на принципиально невербализуемых догадках?

Или это военная тайна и ты дал подписку о неразглашении? :)
 

JVN

Guest
Автор оригинала: Crazy
Исполнение скрипта вообще зависит от запроса клиента. В чем конкретно источник небезопасности?
Исполнение, но не код.

Может все это случиться при отсутствии ошибки? Не может. При любом запросе пользователя.

Так в чем конкретно разница?
Разница в том, что такую ошибку гораздо труднее обнаружить. Разница только в трудности диагностики потенциально уязвимых мест.

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

Может скрипт из-за ошибки программиста уничтожить все файло? Может.

Может скрипт из-за ошибки программиста модифицировать файло и БД? Может.

Может скрипт из-за ошибки программиста получить доступ к конфиденциальной информации? Может.

Может скрипт из-за ошибки программиста воспользоваться дырками в защите сервера, которыми не воспользовался сам программист? Может.
 

Crazy

Developer
Автор оригинала: JVN
Исполнение, но не код.
Ты так и не объяснил, каким образом это снижает безопасность. Сто раз сказать "все арбузы синие" -- это вовсе не то же самое, что доказать это утверждение.

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

Ok. Я понял, что кроме bla-bla-bla мы ничего не услышим. Более вопросов к тебе не имею. Спасибо за дискуссию.
 

Demiurg

Guest
Crazy
все просто, человек не уверен в том, что напишет безопаную генирацию кода (я, поскольку никогда не занимался этим, тоже не уверен), поэтому он вбил себе в голову что это не безопасно, фобия у него такая. Естественно если он так считает, то и другим объясняет, только аргументов нет.
 

JVN

Guest
Автор оригинала: Demiurg
Crazy
все просто, человек не уверен в том, что напишет безопаную генирацию кода (я, поскольку никогда не занимался этим, тоже не уверен), поэтому он вбил себе в голову что это не безопасно, фобия у него такая. Естественно если он так считает, то и другим объясняет, только аргументов нет.
Не вбивал я себе в голову ничего :))
Просто в свое время в руки попались требования по безопасности для Web-программитов, написанные очень грамотными в этой области людьми.
Так вот там _это_ дело стояло чуть ли не первым пунктом - НИЗЯ.

Не то чтобы они боялись ошибок программистов - программисты там были грамотные. Боялись того, что уж очень геморрно потом убедиться что их там действительно нет.

А аргумент простой (сорри за нарочитую тупость примера, но в форуме большой скрипт не напишешь):

Пишем скрипт, "который генерит скрипт":

PHP:
$script = 'что-то1'.'unlink($file)'.'что-то2';  
fwrite($handle, $script);
В "что-то1" делаем ошибку и переменная $file у нас зависит от запроса к сгенерированному скрипту...

Я не утверждаю что таким образом _нельзя_ писать безопасные скрипты. Можно еще и как. Я всего лишь говорю о том, что трудоемкость диагностики ошибок возрастет во много раз.

2Demiurg:
А фобия насчет безопасности у меня есть :)))
В свое время пришлось работать с людьми из ФАПСИ - там надрессировали конкретно. Вот у кого действительно фобия...
 

Crazy

Developer
Автор оригинала: JVN
Просто в свое время в руки попались требования по безопасности для Web-программитов, написанные очень грамотными в этой области людьми.
Так вот там _это_ дело стояло чуть ли не первым пунктом - НИЗЯ.
Причем имена этих людей засекречены. Равно как и причины, которыми они это обосновывали. Я полагаю, эти ГРАМОТНЫЕ в этой области люди получили эти сакральные знания непосредственно от Мирового Разума.

Мне только одно непонятно: лично тебе было совершенно неинтересно узнать, почему же они так считают? Ах да, я же обещал ничего не спрашивать...

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

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

1. Метапрограммирование применяется прежде всего там, когда код размера N может породить код размера M, причем M много больше, чем N.

2. Вероятность внесения бага практически пропорцианальна размеру кода. Следовательно, вероятность внесения бага в варианте с метапрограммированием меньше в M/N раз.

2. Стоимость проверки корректности кода практически пропорциональна размеру этого кода. Следовательно, грамотное применение метапрограммирования снижает расходы на контроль корректности еще в M/N раз.

Это не теория. Это практические данные.

PHP:
$script = 'что-то1'.'unlink($file)'.'что-то2';  
fwrite($handle, $script);
В "что-то1" делаем ошибку и переменная $file у нас зависит от запроса к сгенерированному скрипту...
А теперь делает то же самое без всякого метапрограммирования:

PHP:
что-то1
unlink($file)
что-то2'
... и вследствии той же ошибки получаем стирание того же файла. Да, второй код проверить проще, чем первый -- при коэффициенте размножения, равным 1. Но так применяют метапрограммирование... мнэ... весьма слабые программисты.

В реальности у тебя будет 50 блоков кода второго типа, причем при ручном написании ЛЮБОЙ из них может содержать эту ошибку. И проверить нужно каждый.

Я всего лишь говорю о том, что трудоемкость диагностики ошибок возрастет во много раз.
Прости, но ты именно "всего лишь говоришь".

В свое время пришлось работать с людьми из ФАПСИ - там надрессировали конкретно. Вот у кого действительно фобия...
Из практики:

- Пункт 13.8 не соответствует ГОСТ Foobar.
- Обана. Покажите, в каком месте!
- Не покажем. Это секретный ГОСТ.
Занавес.
 

PhpGuest

Guest
Автор оригинала: JVN
..Если, конечно, речь не идет о шаблонных движках
ну не только в шаблонных движках (кеширование),
еще удобно link-файлы делать,
файлы параметров
макросы ... (больше ничего не делал :))
 

Raziel[SD]

untitled00
JVN Пример:
У меня есть сложный каталог, генерация страницы занимает довольно продолжительное время, страницы отдаваемые пользователю, оличаются только наличием имени пользователя и составом заказа, и гораздо удобнее заранее сгенерить html для самого каталога, и php который будет генерить меняющуюся(состав заказаных товаров, имя пользователя) информацию.
теперь вопрос: где здесь потенциальная уязвимость ? и где их будет больше при генерации всей страницы или в том примере, который я привел ?
 

JVN

Guest
2Raziel[SD]:
Откуда же я могу знать где у тебя потенциальная уязвимость если я не видел этого скрипта.
В таком простом случае ее может и нет.
 

Raziel[SD]

untitled00
JVN
Плохо, потому что это потенциально опасная технология.
Вот я и спрашиваю где моем примере может быть больше ошибок ? в данный момент ты дальше демагогии так и не ушел.
 

JVN

Guest
Как вы любите спорить :))
А не думали что для вашего метапрограммирования, скорее всего, придется файло открыть на запись апачу ?

2Raziel[SD]:
Возможно я чего-то не понял в твоем примере, но я вообще не пойму зачем там нужно МП.
Как абсолютно правильно заметил выше Crazy:

"Метапрограммирование применяется прежде всего там, когда код размера N может породить код размера M, причем M много больше, чем N."
 
Сверху