Warum hacken wir nicht den Kern?

17

Ich konnte nicht glauben, dass diese Frage auf dieser Website noch nicht beantwortet wurde, aber ich habe sie bei der Suche nicht gefunden, also ...

Warum ist es eine so schlechte Idee, ein Verbrechen gegen die Natur zu begehen, um Core zu hacken?

  • Ist es wirklich so toll, deine Kernversion upgraden zu können? Die meisten meiner Websites haben ohnehin schrecklich veraltete Kerne. Warum also die Mühe machen?
  • Warum kümmert sich die Community so sehr um die Website-Eigentümer, auch wenn dies so schlecht für sie ist? Warum wird es als "Kätzchen töten" bezeichnet? Ist das nicht eher hyperbolisch?
  • Der Hacking-Kern ist so einfach. Mögen wir es nicht, den einfacheren Weg zur Lösung eines Problems zu gehen?
  • Gibt es keine Probleme, die nur durch Hacken des Kerns gelöst werden können? Was dann?
Beth
quelle
Ich denke, wenn Sie eine kleine Website ohne Team selbst erstellen, können Sie vielleicht den Kern hacken, wenn Sie es brauchen, aber warum brauchen Sie das? Ich glaube, dass Sie jedes Problem lösen können, ohne den Kern zu hacken
Petro Popelyshko
4
@beth Ich meine das eigentlich ziemlich ernst. Die für sichere Seiten in D7 erforderlichen Patches sind seit über einem Jahr aufgrund von Problemen mit den Komponententests nicht mehr verfügbar. Soweit ich mich erinnern kann, gibt es in D6 immer noch einen Fehler mit der Länge des Menünamens. Keines von diesen hat gezeigt, wie weit es gediehen ist, sich tatsächlich zu engagieren.
mpdonadio
3
@MPD Das ist ein großartiges Beispiel, ich kenne ein paar Leute, die nach diesen Patches suchen, um es zu schaffen (ich eingeschlossen). Abgesehen von Kätzchen muss man natürlich manchmal unbedingt den Kern patchen und daran ist nichts auszusetzen, solange diese Patches gut dokumentiert sind und jedem im Team zur Verfügung stehen. Es spricht auch für die Bedeutung eines soliden Bereitstellungsprozesses, bei dem Aktualisierungen nicht blind durchgeführt werden, ohne dass zuvor halbmanuelle Überprüfungen durchgeführt werden. In meinem (kleinen) Team dokumentieren wir nur, was sich geändert hat und stellen sicher, dass jeder es überprüft, bevor es aktualisiert wird
Clive
3
Wenden Sie den Patch an und notieren Sie ihn in einer Textdatei, die sich im Stammverzeichnis Ihres Repository befindet.
Charlie Schliesser
1
Ich würde es umformulieren in "Nie Kern hacken, es sei denn, Sie haben einen Mechanismus, um Ihre Updates noch zu haben". Dies erfordert einige Überlegungen und hat Auswirkungen auf Ihren Entwicklungsworkflow. Wenn Sie oder Ihr Team nicht für diese zusätzliche Kinderbetreuung bereit sind, tun Sie es nicht.
donquixote

Antworten:

9

Grundsätzlich gibt es drei Gründe, den Drupal-Kerncode nicht zu ändern:

  • Ihre Änderungen gehen bei jedem Update von Drupal verloren, wenn Sie keine notwendigen Schritte unternehmen. Selbst wenn Sie einen Patch für die aktuelle Drupal-Version erstellen, die Sie verwenden, kann der Patch nicht auf die neuere Version angewendet werden, und Sie müssen auch einen Patch für die neue Version erstellen.

  • Sicherheitskorrekturen beziehen sich auf den Drupal-Kern, der auf Drupal.org verwaltet wird, konnten jedoch nicht auf Ihre gehackte Version angewendet werden. Das heißt, Sie sollten überprüfen, ob Ihre Version nicht von dem Sicherheitsproblem betroffen ist, das gegen den Drupal-Kern aufgeworfen wurde.
    In dem Fall, dass Ihre gehackte Version ein anderes Sicherheitsproblem aufwirft, sind Sie die einzige Person, die es finden kann, da Sie nicht über die Unterstützung des Sicherheitsteams verfügen, das Sicherheitslücken im Drupal-Kerncode und in Drittanbietern untersucht Module auf Drupal.org gehostet.

  • Die von Ihnen eingeführten Änderungen sind möglicherweise nicht mit Drupal selbst kompatibel, aber auch mit Modulen von Drittanbietern, die für die Arbeit mit Drupal Core erforderlich sind, und nicht mit einer gehackten Version, die erstellt werden kann.
    Jedes Mal, wenn Drupal eine neue Funktion einführt (was immer noch in Drupal 7 und Drupal 6 vorkommt, wenn auch mit geringerer Häufigkeit) oder eine neue API-Änderung, besteht die Möglichkeit, dass die gehackte Version mit den letzten Änderungen nicht kompatibel ist.

Das heißt, es ist möglich, eine gehackte Version zu erstellen, aber das ist nicht die Aufgabe, die ein einzelner Entwickler übernehmen kann, genauso wie Drupal nicht von einer einzelnen Person verwaltet wird. Tatsächlich ist Pressflow eine gehackte Version von Drupal, die mit Blick auf die Leistung erstellt wurde und um einige Leistungsprobleme zu lösen, die eine Drupal-Site haben könnte.

Gibt es keine Probleme, die nur durch Hacken des Kerns gelöst werden können? Was dann?

In den meisten Fällen ist es möglich, die Funktionen / das Verhalten zu ändern, ohne den Drupal-Kerncode zu bearbeiten. Es gibt immer einen Haken, mit dem sich die Funktionen / Verhaltensweisen von Drupal ändern lassen. Dies ist die bevorzugte Methode.

kiamlaluno
quelle
4
Möglicherweise stelle ich zwei Probleme in der realen Welt vor, die die Behauptungen im letzten Absatz in Frage stellen könnten.
mpdonadio
3
In the case your hacked version introduces a different security issue...Ich sehe dies nicht als ein besonders starkes Argument, das eine Kerndatei im Vergleich zu irgendetwas anderem modifiziert. Wenn ich keinen Kern hacke und stattdessen ein Sicherheitsproblem über ein Modul einführe, ist mein System immer noch gefährdet. Kompromittiert ist kompromittiert, es spielt keine Rolle, ob ich eine vorhandene Datei bearbeite oder eine neue hinzufüge.
Zoredache
@Zoredache Wenn das Sicherheitsproblem in Ihrem Modul vorhanden ist, können Sie es jederzeit deaktivieren, und der Rest der Site würde ohne Sicherheitsproblem funktionieren, auch ohne Funktionen. Wenn Sie im Drupal-Kerncode ein Sicherheitsproblem einführen und die ursprünglichen Dateien nicht einfach zurückkopieren können, weil Sie auch das Schema einiger von Drupal verwendeter Tabellen geändert haben, ist dies ein größeres Problem.
kiamlaluno
2
Die Aussage, dass "es immer einen Haken gibt ..." ist nicht korrekt. Es ist nicht ungewöhnlich, dass etwas in den Drupal-Kern eingearbeitet ist, das nicht ohne Hacken umgangen werden kann. Außerdem gibt es für Drupal offene Probleme mit Patches, die nicht festgeschrieben wurden. In diesem Fall müssen Sie den Kern patchen um diese Probleme anzugehen.
Rooby
2
Absolut, aber das ist ein einfaches Beispiel. In den meisten Fällen gibt es Hooks, aber es gibt immer noch Zeiten, in denen Sie den Core patchen müssen, es sei denn, Sie möchten viel Code duplizieren und etwas Benutzerdefinierteres erstellen. Damit beispielsweise Administratoren unveröffentlichte Bücher ordnungsgemäß verwalten können, benötigen Sie den Patch unter drupal.org/node/520786. Wenn die SQL-Standardsuche von drupal mit Teilwörtern (einschließlich des Suchfilters für Ansichten) übereinstimmen soll, benötigen Sie den Patch unter drupal.org / node / 498752 # comment-6001310 - Es ist nicht möglich, diese zu umgehen, ohne den Kern zu hacken.
Rooby
14

Ich könnte hier eine massive Antwort schreiben, aber ich werde nur diesen Link posten: Niemals Kern hacken !

Der Hauptgrund, den ich vermute, ist, dass Sie, wenn Sie Core hacken, etwas tun müssen, und es dann aktualisieren ... BANG! Ihre Änderungen sind weg. Hat verloren. Sie könnten dann versuchen, den Code von Ihrem VCS zurückzusetzen, aber da Sie Datenbank-Upgrades von Drupal Core nicht zurücksetzen können, möchten Sie den gesamten Code von VCS wiederherstellen und anschließend Datenbanken von Ihren Sicherungen wiederherstellen. Während Sie versuchen, Ihren Code zurückzusetzen, werden Sie wahrscheinlich feststellen, dass Ihre letzte Sicherung der Datenbank vor dem Update fehlgeschlagen ist, und Sie werden mehr schwören als jemals zuvor.

Und - was am wichtigsten ist - wenn Sie Core hacken, töten Dries und Webchick beide ein Kätzchen: -o

Chapabu
quelle
4
Was, sie töten das Kätzchen? Ich dachte, es wäre Gott. . Meine Welt fällt in sich zusammen ...
Clive
1
Weißt du, ich habe meinen Kommentar oben geschrieben, bevor ich hier erwähnte Kätzchen sah.
mpdonadio
13

"Was kann kein Hacking Core für mich tun, der Entwickler?"

  • Ihre Site kann für Sicherheitsupdates aktualisiert werden
  • Ihre Website kann aktualisiert werden, um lästige Fehler im Kern zu beheben
  • Ihre Site kann aktualisiert werden, um neue Module zu unterstützen
  • Auf Ihre Fehlerberichte und Supportanfragen zu Core und Contrib kann geantwortet werden
  • Wenn Sie ein unterstütztes CMS verwenden möchten, haben Sie sich für Drupal entschieden. Wenn Sie Core hacken, in den Worten von Webchick : "Wenn Sie Core hacken, herzlichen Glückwunsch! Sie haben Ihre eigene Gabel von Drupal erstellt, und jetzt sind Sie und Sie allein dafür verantwortlich, diese zu pflegen!"

"Was kann kein Hacking Core für meinen Client tun?"

  • Ihre Site kann von einer anderen Person gewartet werden, nachdem Sie Ihren Kunden entlassen, die Lotterie gewonnen oder von einem Bus angefahren wurden

"Was kann kein Hacking Core für meine Community tun?"

  • Ihre Fehlerberichte enthalten nützliche Informationen für den Maintainer von Core- oder Contrib-Modulen.
  • Wenn Sie einen legitimen Fehler im Core finden, der gepatcht werden muss, reicht es aus, die Änderungen zu vergleichen und als Patch in ein relevantes Problem hochzuladen. Viola! Core ist besser für Ihre Bemühungen und Ihr Name ist mit der Rückgabe von Code an die Community verbunden.

Jeder ist ein Gewinner, wenn Sie nicht Kern hacken!

Beth
quelle
3
Nicht alle Patches werden auf den Kern festgelegt, auch die einfachen.
mpdonadio
1
Stimmt, aber durch das Hochladen haben Sie zumindest eine Aufzeichnung des Patches, dessen Funktion, möglicherweise einiger Versionen, die von anderen verbessert wurden, und die Möglichkeit, ihn herunterzuladen und erneut auf Ihr Projekt anzuwenden, wenn Sie ein überschriebenes Update haben dein Wechselgeld. Und häufig ein Grund, warum es nicht begangen wurde, und alternative Vorschläge. Alles kostenlos.
Beth
6

Ich arbeite derzeit an einer gehackten Core-Website. Ich habe Schwierigkeiten herauszufinden, wie etwas so Einfaches wie Schriftart eingerichtet wird. Ich habe auch ein paar Tage damit verbracht, einen Fehler zu beheben, der durch den Core-Hack verursacht wurde. Ich habe es gefunden, indem ich nach einer Zeichenfolge im gesamten Drupal-Code gesucht habe.

Wenn Sie die Standardstruktur der Programmierung in Drupal nicht befolgen, wie kann dann jemand anders die von Ihnen eingeführten Änderungen finden und bearbeiten? Dies ist besonders schmerzhaft, da in Drupal jede einzelne PHP-Datei einen Hook implementieren kann. Versuchen Sie herauszufinden, welches Problem verursacht.

Pawel G
quelle
4
Dies. Wenn Sie eine Site erben, die auf einem bestimmten Framework erstellt wurde, und dann feststellen, dass das Framework gehackt wurde und die Dokumentation für dieses Framework daher möglicherweise irrelevant ist, befinden Sie sich in einer Welt voller Schmerzen. (zusätzlich zu allen anderen oben genannten Gründen ...)
Charlie Schliesser
5
Wetten, dass Sie schon früher von drupal.org/project/hacked gehört haben?
Chris Burgess
Sieht gut aus, Chris. Ich werde auf jeden Fall einen Blick darauf werfen.
Pawel G
Ein anständiges Quellcodeverwaltungssystem sollte Ihnen mitteilen können, was sich geändert hat, und alle Änderungen am Kern anzeigen. Die Suche nach Strings in einer Codebasis sollte ein Standardbestandteil Ihres Debugging-Toolkits in PHP sein.
Toby Allen
5

"Gibt es keine Probleme, die nur durch Hacken des Kerns gelöst werden können? Was dann?"

Um diese Frage zu beantworten, gibt es manchmal Probleme, die Sie überwinden müssen und die bedeuten, dass Sie den Kern (oder ein Contrib-Modul) hacken müssen.

In diesem Fall halte ich es für in Ordnung, zu hacken, solange Sie viele Kommentare in Ihren gehackten Code einfügen und alles dokumentieren, was Sie ändern.

Beispielsweise erstelle ich für jede Kern- oder Beitragsänderung, die ich vornehme, einen Patch. Wenn es allgemein und für andere nützlich ist, sende ich es in einer Ausgabe an drupal.org, ansonsten ist es für meinen eigenen Gebrauch.

Anschließend übergebe ich die Patch-Datei zusammen mit der Codeänderung an meine Versionskontrolle.

Dies bedeutet, dass ich nach Patch-Dateien suchen kann, wenn etwas gehackt wurde.

Darüber hinaus füge ich der Entwicklerdokumentation für die Site eine Liste von Hacks hinzu (Sie sollten wirklich Entwicklerdokumentation haben, um anderen zu helfen, die auf der Site funktionieren könnten, und um sich selbst zu helfen, wenn Sie unvermeidlich Dinge vergessen).

In dieser Hack-Dokumentation liste ich jeden Hack mit der Funktion und dem Grund des Hacks, den betroffenen Modulen / Dateien, dem Namen der Patch-Datei, die den Hack-Code enthält, und einem Link zu einem verwandten drupal.org-Problem auf (fast immer) in meinem Fall gibt es).

Dann haben Sie und alle anderen, die in Zukunft auf der Website arbeiten, eine vollständige Liste von Hacks und müssen sich keine Sorgen machen, dass Sie versehentlich mit einem Update etwas kaputtmachen.

Dann überprüfe ich für den Update-Vorgang meine Liste der Hacks und suche schnell nach Patch-Dateien in allen Modulen, die ich aktualisiere. Wenn es einen Hack gibt und es ein Problem mit drupal.org gibt, überprüfe ich das Problem, um festzustellen, ob der Patch in der neuesten Version enthalten ist. In diesem Fall blase ich den Hack mit dem Update weg und entferne ihn aus meiner Liste der Hacks (make) Wenn Sie sich die Commit-Nachrichten von drupal.org ansehen, stellen Sie sicher, dass das Commit mit der Version des von Ihnen verwendeten Patches übereinstimmt oder zumindest funktional identisch ist.

Wenn der Patch nicht festgeschrieben wurde, muss ich nur die Module aktualisieren und die Patches erneut anwenden. In vielen Fällen werden die Patches immer noch sauber angewendet und der Vorgang ist einfach. Manchmal müssen Sie jedoch die Patches für die neue Version erneut ausführen und dann die neue Version des Patches in Ihr lokales Repository übertragen (zusammen mit dem Veröffentlichen im relevanten Repository) drupal.org (falls zutreffend).

Eine andere Sache, die ich gerne mache, wenn ich umfangreichere Patches oder Patches habe, die mit der Kernfunktionalität eines Moduls interagieren (oder nur benutzerdefinierte Module, die sich über ein drupal.org-Modul erstrecken), ist das Überprüfen der Versionshinweise des aktualisierten Moduls ( Das bedeutet, dass sich alle Versionen zwischen Ihrer aktuellen Version und der Version befinden, auf die Sie aktualisieren.) Stellen Sie sicher, dass sich nichts befindet, das Ihren Code beschädigen könnte. Hinweis: Viele Modulbetreuer sind heutzutage gut darin, vollständige Versionshinweise zu geben, aber es gibt immer noch viele, die Versionshinweise in den Müll werfen. In diesem Fall gehe ich in einigen Fällen alle Commit-Nachrichten seit meiner aktuellen Version durch (dies ist normalerweise nur in Fällen der Fall, in denen ich komplexen Code habe, der tief mit einem anderen Modul interagiert). Hinweis:

Testen Sie dann nach der Aktualisierung (auf einer Entwicklungskopie der Site) gründlich. Sie werden schließlich erfahren, was gründlich bedeutet, nachdem ein paar Bugs durchgesickert sind.

Wenn es ausreichend getestet wurde, aktualisieren Sie die Live-Site oder übertragen Sie Ihre lokalen Updates oder was auch immer Ihr Bereitstellungsprozess sein mag.

Der Grund, warum jeder sagt, mach es nicht, auch wenn es einfacher ist: Weil die meisten Leute kein System haben, wie ich es skizziert habe, wenn es darum geht, Updates zu machen, oder die Site jemand anderem zur Arbeit übergeben wird dann wird es ein Albtraum und es muss viel Zeit (manchmal sehr viel Zeit) aufgewendet werden, um Fehler zu beheben, Hacks aufzuspüren und herauszufinden, warum sie da sind usw.

Wenn Sie jemals eine solche Site geerbt haben, werden Sie es verstehen :)

Dummkopf
quelle
2

Wenn Sie davon leben, Drupal-Websites zu installieren und zu erstellen, müssen Sie diese auf dem neuesten Stand halten. Wenn die meisten Ihrer Websites schrecklich veraltet sind, sind Sie kein Profi.

jalal
quelle