Использование eval () в качестве «выключателя» в PHP?

#php #wordpress #eval

#php #wordpress #eval

Вопрос:

У меня есть несколько плагинов WordPress. Однажды один из моих плагинов выдал ошибку PHP в панели администратора. Это помешало владельцам блогов обновить или удалить мой плагин. Я хочу поместить команды PHP в текстовый файл на моем веб-сайте и заставить плагин периодически проверять страницу на наличие новых команд. Затем используйте eval() для выполнения команд.

Каковы некоторые недостатки этого? Кроме плагина, придется сделать дополнительный запрос.

Комментарии:

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

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

Ответ №1:

ДА. В общем случае eval = зло. В этом случае, если ваша страница будет взломана или скомпрометирована, теперь это может быть передано всем пользователям вашего плагина. Я могу настоятельно рекомендовать отказаться от такого рода действий.

Комментарии:

1. Если «страница взломана», не имеет значения, попадает ли код эксплойта в необходимый php-скрипт или в назначенный текстовый скрипт. eval() Вопрос в OPs — это не что иное, как include() .

2. Да, это всего лишь incude (), но вы бы не стали включать () php-файлы из любого другого места, кроме вашей локальной файловой системы, не так ли? Возможно, наши мнения немного отличаются, но я считаю очень важным, если я включу какой-нибудь случайный код eval() из места, которому нельзя доверять.

Ответ №2:

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

Я понимаю, что WP может не способствовать такому разделению проблем, но это может быть более целесообразным подходом здесь. — Кстати, вы могли бы получить более конкретные рекомендации или решения на WordPress.SE для этой темы.