И если по первому вопросу у меня есть мысли, например, проверить введенную строку на содержание "eval(), echo, print и т.д.", то по поводу второго возникли сложности. Если введенный код невалиден, до интерпретатор выдает ошибку парсинга, как отловить которую я не знаю. Пробовал использовать set_error_handler(), но оказалось, что "It is not possible to catch a parse error in eval() using set_error_handler().".
Поэтому прошу помощи. Подскажите, можно как-то проверить валидность php-кода, содержащегося в строке?
Спустя 11 минут, 12 секунд (22.07.2012 - 18:52) kamanch написал(а):
Я так полагаю, что универсалного решения нет.
Сузить вопрос нужно. Что ожидается получить от пользователя? Что ему можно вводить?
Одно дело арифметику, другое управляющие конструкции.
Сузить вопрос нужно. Что ожидается получить от пользователя? Что ему можно вводить?
Одно дело арифметику, другое управляющие конструкции.
Спустя 8 минут, 31 секунда (22.07.2012 - 19:00) killer8080 написал(а):
Цитата (Placido @ 22.07.2012 - 18:41) |
Возникла необходимость использовать в eval() строку, введенную пользователем на сайте через форму. В связи с этим возникли два вопроса. Первый - как обезопасить себя от возможного "непотребства", которое могут ввести через форму, вроде "echo '<script>...</script>, include и т.п.', и второй - как проверить валидность кода перед вставкой его в eval(). |
Выбросить эту дурную затею из головы
Уверен что задачу можно решить как то иначе, давать юзеру в руки eval == 'самоубийство'
Спустя 6 минут, 16 секунд (22.07.2012 - 19:07) kamanch написал(а):
killer8080
Мы же задачу не знаем.
Может там какой-нидь онлайн-тренажер по php
Мы же задачу не знаем.
Может там какой-нидь онлайн-тренажер по php
Спустя 3 минуты, 4 секунды (22.07.2012 - 19:10) killer8080 написал(а):
Цитата (h.n.81 @ 22.07.2012 - 19:07) |
Мы же задачу не знаем. |
Какой бы она не была, открывать дыру на сайте не вариант.
Кстати, хороший вопрос, Placido а в чем состоит задача?
Спустя 11 минут, 55 секунд (22.07.2012 - 19:22) Placido написал(а):
Есть у меня свой онлайн-редактор текста (пока на локалхосте), в котором можно использовать регулярные выражения. Делал для себя - работаю контент-менеджером на одном сайте, приходится форматировать и исправлять большие объемы текста - без регулярок никуда. Правила замены сохраняются по категориям, их можно редактировать, добавлять или удалять. До недавнего времени было два типа правил - обычная замена (strtr) и замена по регулярному выражению (preg_replace). Но теперь понадобилось использовать preg_replace_callback. Паттерн и сама callback-функция вводится через форму. Пока все работает ОК, пока я работаю с этим редактором сам, но в будущем планируется разместить редактор на хостинге с доступом к нему других людей. Вот и возник этот вопрос. Если решения не найду, то права на добавление callback-правил оставлю только себе и некоторым админам, чтобы не случилось ничего нехорошего.
Спустя 59 минут, 34 секунды (22.07.2012 - 20:21) killer8080 написал(а):
Цитата (Placido @ 22.07.2012 - 19:22) |
До недавнего времени было два типа правил - обычная замена (strtr) и замена по регулярному выражению (preg_replace). |
preg_replace то же уязвим, если допускается ввод модификаторов (имеется ввиду модификатор e)
Цитата (Placido @ 22.07.2012 - 19:22) |
Если решения не найду, то права на добавление callback-правил оставлю только себе и некоторым админам, чтобы не случилось ничего нехорошего. |
что также может быть не безопасно, если нет защиты от CSRF, ну и само собой, случайные лица не должны получить привилегии админов.
А нельзя ли это сделать на клиентской стороне? В JS так же есть регулярки.
Спустя 13 минут, 17 секунд (22.07.2012 - 20:34) Placido написал(а):
Нет, возможности вводить модификаторы через форму на сайте нет. Только паттерн и строку замены. По поводу JS не думал, так как знаю его пока только на зачаточном уровне.
Спустя 5 минут, 48 секунд (22.07.2012 - 20:40) killer8080 написал(а):
Цитата (Placido @ 22.07.2012 - 20:34) |
По поводу JS не думал, так как знаю его пока только на зачаточном уровне. |
Спустя 48 минут, 13 секунд (22.07.2012 - 21:28) Семён написал(а):
Сделать вместо явного кода - его псевдо-конструктор.
Спустя 19 минут, 58 секунд (22.07.2012 - 21:48) Placido написал(а):
Цитата (Семён @ 22.07.2012 - 21:28) |
Сделать вместо явного кода - его псевдо-конструктор. |
Это мысль. Спасибо за идею!