![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Zipo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 4.11.2003 Репутация: нет Всего: 0 |
Как можно исполнить php-код полученный в результате исполнения другого php-кода.
Есть ли такая функция в php? Метод: Записать в файл и потом его проинклудить не сильно подходит. |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
eval
Это сообщение отредактировал(а) Secandr - 19.1.2004, 19:15 |
|||
|
||||
| lifer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 17.1.2004 Где: Kiev, Ukraine Репутация: нет Всего: нет |
Eval(string)
Eval берет содержимое строки аргумента и, обрабатывает, это подобно мини PHP/FI скрипту. Выполняется как отдельный скрипт PHP/FI. Любые установки или обращения к переменным внутри eval будут из глобальной области видимости текущего контекста оператора eval. Для строковых аргументов выполняется подстановка переменных замена выполнена на параметрах ряда, таким образом если в выражении нужно использовать переменные , то их нужно экранировать. Несколко примеров:
Это сообщение отредактировал(а) lifer - 19.1.2004, 19:32 |
|||
|
||||
| Zipo |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 4.11.2003 Репутация: нет Всего: 0 |
спсб
Это не извращение. Давай обсудим. Коротко: Будет движок для сайта. Всю инфу о сайте (темплейты,сурсы) будет хранить в БД. Суть в извлечении кода из БД и исполнение его. Если есть идеи, то прошу изложить.
экранирование не обязательно. В данном случае без него перед исполнением eval $a будет уже считаться переменной и будет заменена на соотв. значение. eval('$a=1; echo $a;'); |
||||
|
|||||
| lifer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 17.1.2004 Где: Kiev, Ukraine Репутация: нет Всего: нет |
Ну так ты ж апостроф вместо кавычек подставил. Переменные, внутри строки, заключенной в апострофы, не интерполируются. Это сообщение отредактировал(а) lifer - 19.1.2004, 20:21 |
|||
|
||||
| Zipo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 4.11.2003 Репутация: нет Всего: 0 |
да я про тоже это был пример |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
Zipo Смысл хранить темплейты в БД? Темплейты - вещь редко изменяемая, и если её хранить в файлах, то работает немного быстрее.
|
|||
|
||||
| Zipo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 4.11.2003 Репутация: нет Всего: 0 |
дабы не входить в шок при поиске нужного для редактирования. И это, немного, несравнимо мало. |
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: 7 Всего: 32 |
Лучше переделать движок сайта. Eval - это воистину изврат, работает очень медленно.
-------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
Zipo Структурируй шаблоны. Или храни сами шаблоны в БД, а обробатывай их следующим образом:
Шаблон из БД читаешь:
Работать будет быстрее. |
|||
|
||||
| Vaulter |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1724 Регистрация: 30.12.2002 Где: бункер Репутация: 6 Всего: 22 |
MuToGeN
ну почему же изврат, вот vBulletin на eval работает - шаблоны так парсит имхо удобно читать такой шаблон: <table> <tr><td>$user[name] <td>$user[usergroup] </table> а? ) |
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: 7 Всего: 32 |
это через echo скорее пропускается, чем через eval.
удобно-то удобно, но время CPU тоже иногда жалко... -------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| Zipo |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 4.11.2003 Репутация: нет Всего: 0 |
Шаблоны и php код будут хранится в разных местах. И будут связываться средствами движка.
Суть в хранении всего кода сайта в БД. Кроме картинок и подобного. Т.е. на винте будет только движок. если честно, то я не заметил тормозов при использовании eval:
результат:
Это сообщение отредактировал(а) Zipo - 20.1.2004, 19:21 |
||||
|
|||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: 7 Всего: 32 |
Мдя... Видимо, его уже оптимизировали неплохо... Сам тестил давно, может, еще на PHP 3
-------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| Master |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1530 Регистрация: 13.5.2003 Где: Mother Russia Репутация: 8 Всего: 10 |
не надо использовать eval
такие движки податливее всего к элементарному взлому. вот представь такую ситуацию. у тебя по какой-то тех пречине произошел збой в БД и при этом включен register_globals. переменная не обновится, а ты её проэвалиш. всё. двери открыты. не надо юзать eval. можно и без него обойтись. не дороже будет стоить это уж точно. -------------------- Вавилон, Вавилон Что ты построил, что разрушил? Вавилон, Вавилон Плавятся души дьявольским огнем. |
|||
|
||||
| Zipo |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 4.11.2003 Репутация: нет Всего: 0 |
ничего не понял. Можно конкретнее на примере? Но тут уже слишком много если... Если БД падает сразу произойдет die.
Приведи свою версию. Может она окажется действительно лучше. |
||||
|
|||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
Zipo Как ни странно все ети если совподают в час Х.
P.S. ПАраноя - не болезнь, а образ жизни. Причём так жить проще. |
|||
|
||||
| Zipo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 4.11.2003 Репутация: нет Всего: 0 |
дело не в этом, я не могу понять, о какой ситуации идет речь, что виновником будет именно eval выражения типа: это плохо не используй может... для меня являются не больше чем суеверием. Нужны аргументы. |
|||
|
||||
| Master |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1530 Регистрация: 13.5.2003 Где: Mother Russia Репутация: 8 Всего: 10 |
команда eval выполняет любой PHP код
если в выполнение каким бы то ни было образом попадет чужой код... тогда позно караул кричать и все аргументы появятся. -------------------- Вавилон, Вавилон Что ты построил, что разрушил? Вавилон, Вавилон Плавятся души дьявольским огнем. |
|||
|
||||
| Vaulter |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1724 Регистрация: 30.12.2002 Где: бункер Репутация: 6 Всего: 22 |
Master
опять если ) а как он туда попадет, если его туда элементарно никто не пустит? ) |
|||
|
||||
| Master |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1530 Регистрация: 13.5.2003 Где: Mother Russia Репутация: 8 Всего: 10 |
Vaulter а можно избежать этих объяснений одно из которых я уже привел как пример, если просто использовать альтернативу.
-------------------- Вавилон, Вавилон Что ты построил, что разрушил? Вавилон, Вавилон Плавятся души дьявольским огнем. |
|||
|
||||
| Zipo |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 4.11.2003 Репутация: нет Всего: 0 |
именно поэтому она мне и нужна.
Как уже говорил Vaulter это не проблема eval'a. Тем более я даже представить не могу каким чудом из Гета и Поста php код может проникнуть в eval. Код будет извлекаться из БД. И только извлеченный код будет исполнятся в eval'e. Т.е. даже если пользователь движка в своем коде будет неумело пользоваться переменными из $_REQUEST, то они не смогут непосредственно попасть в исполнение на eval движка. Ты, что-то путаешь.
милости просим предлагай. Это сообщение отредактировал(а) Zipo - 21.1.2004, 17:40 |
||||||
|
|||||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
Zipo Я бы не был таким самоувереным. Всегда существует вероятность ошибки.
Вот возможные причины появления вредоносного кода в евале: 1. Найдут уязвимость в веб-сервере или пхп и при её помощи вставят в переменую свой код (маловероятно) 2. Ошибка програмирования: просто где-то недопридумаешь защиту для этого eval (встречается сплошь и рядом) 3. Ошибка пользования. "Тупой" юзер, по дефолту все юзеры тупые, запишит что-то наподобии while (1==1){echo"Test";} - это самая безобидная ачепятка. (100% такое будет) Можно придумать и другие варианты. |
|||
|
||||
| Zipo |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 4.11.2003 Репутация: нет Всего: 0 |
не путай теплое с мягким. Я могу аналогично высказаться на использование SQL запросов. В большинстве случаев начинающие программисты и не подозревают об опасностях связанных с их использованием. Но никто же не говорит "_не_ используйте их"
И причем тут eval ? Под словом пользователь я никак не имел ввиду именно тупого юзера. Это может быть программист, такой как я и ты. Проблему описанную тобой не избежать. Хотя в случае с eval'om гораздо больше шансов ее обойти.
Согласен, но использование eval'a здесь абсолютно не причем. Есть вероятность, что эту ошибку допустишь на ровном месте... |
||||||
|
|||||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
Zipo Эти три пункта не ведут напрямую к уязвимости, они лишь увеличивают вероятность сбоя.
Скажим так: если ты делаешь малоответственую систему - eval допустим. Если тебе нужна система которой будет пользоваться широкий круг людей и при этом нужна хорошая отказоустойчивость - eval недопустим. Eval - вещь сколь привлекательная, столь же и опасная. И нужно десять раз подумать, а только потом применять её ИМХО. |
|||
|
||||
| Zipo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 4.11.2003 Репутация: нет Всего: 0 |
Secandr, я всего лишь выслушиваю ваши мнения. И в некоторых случаях с ними не соглашаюсь. Я не вставал на позицию безоговорочного использования eval'a. Я хочу найти оптимальный вариант. Для этого мне нужны аргументы, а не громкие фразы.
Мое ИМХО: если человек утверждает, значит, он может это подтвердить. Или предложить альтернативу. Я никого здесь не пытаюсь осудить. Натура у меня такая - верю только фактам. |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
Zipo Я привёл наиболее явные пути понижения отказоустойчивости в случае использования eval`а.
Если ты делаешь проект для себя и ещё пары продвинутых програмистов. То eval - нетак страшен. Всё упирается в человеческий фактор. Будь то ошибка программиста, ошибка пользователя твоей системы, беспечность пользователя (Кто-то может просто остаить пароль злоумышленику, который свалит сервер). Могу привести конкретные схемы развития ситуации. Ещё раз хочу подчеркнуть использование евал не ведёт к апокалипсису, а только повышает вероятность его проявления и может повысить его мощность. |
|||
|
||||
| Master |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1530 Регистрация: 13.5.2003 Где: Mother Russia Репутация: 8 Всего: 10 |
http://forums.webscript.ru/forumdisplay.php?forumid=16
вот тебе факты. если зайдеш как можно быстрее, увидеш что такое глюки на сервере. -------------------- Вавилон, Вавилон Что ты построил, что разрушил? Вавилон, Вавилон Плавятся души дьявольским огнем. |
|||
|
||||
| lifer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 17.1.2004 Где: Kiev, Ukraine Репутация: нет Всего: нет |
Там уже ничего нету
|
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
lifer У меня скриншот остался
|
|||
|
||||
| Master |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1530 Регистрация: 13.5.2003 Где: Mother Russia Репутация: 8 Всего: 10 |
А у меня знаеш сколько раз такая фигня была с валуем?
просто всё работает кроме MySQL сервера... к тому же с сервером может быть всё нормально, но может быть сбой в таблице... -------------------- Вавилон, Вавилон Что ты построил, что разрушил? Вавилон, Вавилон Плавятся души дьявольским огнем. |
|||
|
||||
| IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 44 Всего: 73 |
Secandr, покажи.
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
| lifer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 17.1.2004 Где: Kiev, Ukraine Репутация: нет Всего: нет |
Secandr скриншот в студию
|
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
![]() Вот любуйтесь. |
|||
|
||||
| lifer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 17.1.2004 Где: Kiev, Ukraine Репутация: нет Всего: нет |
И всё
А я думал там будет написанно: "зЛосТнЫй кУл-хАЦКеР вАсЯ хАкнУл эТу стрАнИчкУ чЕрЕз eval() " |
|||
|
||||
| W_w |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 16.3.2007 Репутация: нет Всего: нет |
Я тут ваше почитал задался вопросом...
Что лучше: 1. Понадеятся на безопасность eval; 2. Написать компилятор собственного скрипта и в базе хранить скрипт; 3. Инклудать файлы с диска с php; Предпологаймые потери: 1.Взлом, страдания процесора 2.Страдание процесора и потеря собственного времени 3.Потеря 5-6 мб на сервере (3 000-20 000 файлов) Я в замешательстве!!? |
|||
|
||||
| Vaulter |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1724 Регистрация: 30.12.2002 Где: бункер Репутация: 6 Всего: 22 |
к безопасности eval прочитай еще раз тему.
когда не работает mysql - скрипт должен заканчиваттся, уведомляя (или нет) пользователя (и адмистратора) register_globals - анахронизм. везде off 2. напиши! 3. все инклудят! и ничего... потери: о боже!!!! у меня 2гига скушали на веб сервере засранцы |
|||
|
||||
| W_w |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 16.3.2007 Репутация: нет Всего: нет |
Спасибо!
Начальство конечно нет, это так для себя заметки на будущее. Мне нужна была оценка со стороны, ато знакомый задрал! Мол пиши скрипт, пиши скрипт... |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |