Wie finde ich alle Eingänge, die den PHP-Eingangsfilter verwenden, um das PHP-Filtermodul vollständig zu deaktivieren?

10

Ich möchte das PHP-Filter-Modul auf einer großen Website deaktivieren, aber es würde Äonen dauern, alle Knoten, Blöcke und anderen Felder durchzugehen, in denen Sie den PHP-Filter verwenden könnten.

Gibt es eine einfache Möglichkeit oder Methode, SQL-Abfragen auszuführen, um herauszufinden, wo der PHP-Filter auf meiner Website verwendet wird?

Alex
quelle

Antworten:

9

Anstatt das Rad neu zu erfinden, installieren Sie einfach das Sicherheitsüberprüfungsmodul , das die folgende Prüfung enthält:

PHP oder Javascript im Inhalt (Knoten und Kommentare und Felder in Drupal 7)

Für Blöcke können Sie die Formatspalte in der Tabelle block_custom überprüfen.

Das Schwierige ist Views - Ich habe noch keinen zuverlässigen Weg gefunden, um unerwünschtes PHP programmgesteuert in Views zu finden.

Clive
quelle
1
Ich denke, wenn die Leute von Security Review nicht in der Lage waren , eine zuverlässige Überprüfung für Views hinzuzufügen, ist dies möglicherweise einfach so gut wie unmöglich.
Mołot
@ Mołot: Ich habe gerade einen Weg gefunden, um Ansichten abzurufen, für die PHP aktiviert ist. Siehe meine Antwort unten. Es wird großartig sein zu wissen, dass es irgendwelche Nachteile oder Randfälle gibt ...
Anil Sagar
1
Ich habe nur "OK ​​Nicht vertrauenswürdige Benutzer haben keinen Zugriff auf das PHP-Eingabeformat". - mit der neuesten Version. Es hat mich grün gemacht, als ich einen Block mit PHP-Eingabeformat auf der Titelseite hatte . Ihre Antwort scheint im Moment einfach falsch zu sein.
Mołot
Nach allem, was ich sagen kann ... sagt Ihnen das Sicherheitsüberprüfungsmodul, dass der PHP-Filter verwendet wird ... nicht welche Elemente ihn genau verwenden, was bei einer echten Sicherheitsüberprüfung hilfreich wäre. Dies ist jedoch eine gute Warnung, dass weitere Untersuchungen erforderlich sind.
General Redneck
7

Sie können alle Ansichten finden, für die PHP aktiviert ist, indem Sie den folgenden Befehl in MySQL ausführen ...

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".*'

Die Tabelle views_display speichert diese Informationen im serialisierten Format. Ich habe die oben genannte Abfrage wie erwartet getestet. Ich hoffe, sie hilft, das PHP-Rätsel der Ansichten zu lösen :-)

Anil Sagar
quelle
1
Sieht gut aus. Müsste es ein bisschen testen. In der Zwischenzeit habe ich mir die Freiheit genommen, die Art und Weise, wie Sie die Abfrage geschrieben haben, zu bearbeiten (natürlich ohne die Logik, die Namen usw. zu berühren).
Mołot
Vielen Dank :-) Ich habe gerade überprüft und ich kann Ansichten sehen, die PHP aktiviert hat. Hoffen wir, dass es auch für OP funktioniert.
Anil Sagar
1
Dies funktioniert nicht für alle Ansichten (z. B. die im Code definierten), und dieser reguläre Ausdruck kann leicht zu falsch positiven Ergebnissen führen ... besser als nichts, obwohl ich denke :)
Clive
Mit phpmyadmin können Sie ganz einfach alle Spalten aller Tabellen durchsuchen, nach PHP suchen und die Ergebnisse manuell durchgehen.
Rooby
0

Der Code von Anil Sagar oben funktioniert nur, wenn die Ansicht in der Datenbank gespeichert ist. Wenn die Ansicht nur aus Code besteht, funktioniert sie nicht. Also habe ich einen kleinen Ausschnitt geschrieben, den ich laufen lasse, um alle Ansichten in der Datenbank zu speichern. Dann kann ich das MySQL-Snippet verwenden, um PHP zu zeigen.

  $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
quelle
0

Alte Frage, war aber zuerst bei meiner Google-Suche.

Es gibt ein Contrib-Modul, das alle PHP-Einträge finden soll:

PHP Finder

Das Modul 'PHP Finder' wird verwendet, um herauszufinden, wo das PHP-Filterformat verwendet wird, ob im Knoten, Block oder in den Ansichten.

Spokje
quelle
Was ist mit PHP in Regeln verwendet?
Pierre.Vriens