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

10

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

Есть ли простой способ или метод, возможно, запустив SQL-запросы, чтобы выяснить, где фильтр php используется на моем сайте?

Alex
источник

Ответы:

9

Вместо того, чтобы заново изобретать колесо, просто установите модуль Security Review , который имеет следующую проверку:

PHP или Javascript в контенте (узлы, комментарии и поля в Drupal 7)

Для блоков вы можете проверить формат столбца в таблице block_custom.

Трудным является Views - мне еще предстоит найти надежный способ найти мошеннический PHP в Views программным способом.

Клайв
источник
1
Я думаю, что если бы ребята из Security Review не смогли добавить надежную проверку для Views, это может быть просто невозможным.
Молот
@ Mołot: только что нашел способ получить просмотры, для которых включен php, пожалуйста, смотрите мой ответ ниже. Было бы здорово узнать, что у него есть какие-либо недостатки или крайние случаи ...
Анил Сагар
1
Все, что я получил, это «ОК. Ненадежные пользователи не имеют доступа к использованию формата ввода PHP». - с последней версией. Я получил зеленый, когда у меня был блок с форматом ввода php на первой странице . Ваш ответ кажется просто неверным в данный момент.
Молот
Итак, из того, что я могу сказать ... Модуль проверки безопасности говорит вам, что фильтр php используется ... не то, какие именно элементы его используют, что в настоящем обзоре безопасности было бы полезно. Это, однако, хорошее предупреждение о необходимости дальнейшего расследования.
Генерал Реднек
7

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

SELECT vv.name , vd.display_options
FROM views_display AS vd
LEFT JOIN views_view AS vv ON vv.vid = vd.vid
WHERE vd.display_options REGEXP '.s:[3]+:"php".*'

Таблица views_display хранит эту информацию в сериализованном формате .... Я проверил вышеупомянутый запрос работает, как и ожидалось .. Надеюсь, это поможет решить загадку взглядов PHP :-)

Анил Сагар
источник
1
Выглядит хорошо. Нужно было бы проверить это немного. Тем временем я взял на себя смелость редактирования и исправил то, как вы написали запрос (конечно, не затрагивая его логику, имена и т. Д.).
Молот
Спасибо :-) Я только что проверил, и я могу видеть просмотры с включенным php .. Будем надеяться, что это работает и для OP ..
Анил Сагар
1
Это не работает для всех представлений (например, определенных в коде), и это регулярное выражение может легко давать ложные срабатывания ... лучше, чем ничего, хотя я предполагаю :)
Clive
Используя phpmyadmin, вы можете очень легко искать по всем столбцам всех таблиц, искать php и вручную просматривать результаты.
Роби
0

Код из Анил Сагар выше работает только в том случае, если представление сохраняется в базе данных. Если представление только в коде, оно не будет работать. Итак, я написал небольшой фрагмент, который я запускаю, чтобы сохранить все представления в БД. Затем я могу использовать фрагмент MySQL для отображения php.

  $views = views_get_all_views();
  foreach ($views as $view) {
    if (empty($view->disabled)) {
      $view->save();
      drupal_set_message('view saved: ' . check_plain($view->name));
    }
  }
LoopDuplicate
источник
0

Старый вопрос, но был первым в моем поиске Google.

Есть модуль Contrib, который должен найти все записи PHP:

PHP Finder

Модуль 'PHP Finder' используется, чтобы найти, где используется формат фильтра PHP, будь то узел, блок или представления.

Spokje
источник
как насчет PHP, используемого в правилах?
Pierre.Vriens