PHP Datei, die den eigenen Hash kennt bzw. prüfen kann

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • PHP Datei, die den eigenen Hash kennt bzw. prüfen kann

    Es geht im weitesten Sinne darum, dass ein PHP Datei sich selbst prüfen kann ob Sie verändert worden ist. Dazu mal ein kleiner Code Kern. (Ich finde Code sagt einem immer am meisten).

    Quellcode

    1. $_SELFHASH = '#___SELFHASH___#';
    2. $hash = md5_file(__FILE__);
    3. if( $hash != $_SELFHASH )
    4. die( 'Datei wurde verändert !');


    Natürlich wird dann #___SELFHASH___# gegen den richtigen Hash ausgestausht. Aber ich verfall da immer in eine Endlosschleife beim denken. Weil sobald ich ja den Hash in die Datei schreibe ändert sich ja der Hash der Datei auch damit wieder. Also muss ich den neuen Hash ziehen und den reinschreiben, aber dadurch ändert sich der Hash schon wieder ... usw.
    Über diesen Weg also quasi unmöglich, aber theoretisch muss diese Kombination doch möglich sein, also das die Datei ihren eigenen Hash kennt.

    Einer meiner Kollgen hat es gestern gut auf den Punkt gebracht.
    "Ein klassisches Huhn / Ei Problem, ohne Huhn kein Ei und ohne Ei kein Huhn, aber da es Fakt is das es Hühner gibt, muss sich das ganze auch irgendwie lösen lassen."

    Würde mich freuen wenn mir einer helfen kann oder evtl nur eine gute Idee dazu hat.
    Schreib Artikel gegen Geld - Lupuz.de - Die offene Artikel Community
  • Dann schalge ich dir vor, einfach ein Datei per [phpdoc]include[/phpdoc] einzubinden und dann dort den Hash der zu prüfenden Datei zu speichern. So kannst du z.B. auch eine Datei einbinden, die die Prüfsummen aller Dateien beinhaltet.

    Um dein Endlosschleifendenken auf den Punkt zu bringen:
    Um den Hash zu berechnen, müsstest du ihn schon eingetragen haben, sonst kannst du ja nicht den richtigen Hash berechnen. In der Datei selbst wäre eine Prüfung also nicht möglich.

    Naja, ausser man nimmt alles ausser der Prüfung und berechnet jedesmal davon den Hash. Einfach die Datei per öffnen, Hash raisnehmen, temporär speichern, Hash berechnen und temporöre Datei wieder löschen... aber das wäre denk ich mal zu aufwending... :D
  • Zu Aufwendig wäre bei der einmaligen Erstellung einer solchen Datei fast egal. Aber das hab ich bereits versucht und nach Stunden mit aber Millionen durchläufen aufgeben.

    Man müsste mal einen intelligenten Ansatz entwickeln, der evtl den Algo einer hash prüfung miteinbezieht. Aber weder kenn ich den Algo noch kommt ich im Kopf aus meiner Schleife raus.
    Schreib Artikel gegen Geld - Lupuz.de - Die offene Artikel Community
  • Script 1:
    Dort möchtest du den eigenen Hash überprüfen.

    Script 2:
    Generiert den aktuellen Hash deiner Datei und speichert diesen in eine Datei ab (Textdatei, Datenbank etc.)

    Jetzt fragst du in deinem Script 1 ab, ob der Hash mit der in der Datenbank/Textdokument gepeicherten Wert übereinstimmt. Wenn dein Script funktioniert, führst du Script 2 aus, der den aktuellen Hash des fertigen Script generiert und speichert. Dann müsste, wenn du Script 1 aufrufst, der gleiche Hash sein... So würd ich das machen.
  • Den Lösungs Ansatz versteh ich grad nicht ... aber du hast schon bedacht das der Hash zum Schluss in der Datei (Script 1) stehen muss ... und nicht irgendwo anders ... sonst könnte man ja den Hash ändern nachdem man die Datei geändert hat.

    Wenn du also meinst das dein Anstaz funktioniert, dann für den mal weiter aus ... im Moment versteh ich nicht wirklich was du genau meinst.
    Schreib Artikel gegen Geld - Lupuz.de - Die offene Artikel Community
  • Ich kann ja mal was weiter ausholen ... man verschlüssele x php dateien mit einem schlüssel (crypt) und merke sich deren hash wert. Die Hashwerte aller Dateien bilden eine weitere Datei, die damit in der lage ist die bereits verschlüsselten Dateien auf Änderungen zu kontrolieren (diese Datei wird natürlich von den anderen Datein zur Ausführung benötigt). Nun müsste nur noch diese "Schlüssel Datei" in der Lage sein breits in reintext form den hash wert ihrer eigenen verschlüsselten form zu kennen. Um sich so selbst vor Änderungen zu schützen.

    Ich weiß im Moment auch gar nicht mehr so genau ob ich mich da nicht irgendwo drin verdenke. Ich "glaube" das lässt sich dann nicht mehr so leicht aushebeln , aber egal wie oft ich es durchdenke ... mein kopf blockiert irgendwann. Kann das ein guter Ansatz werden ? oder nur Schwachsinn eines übermüdeten Coders ?
    Schreib Artikel gegen Geld - Lupuz.de - Die offene Artikel Community
  • geh doch mal bitte auf mein Argument ein:
    Eine veränderbare Datei kann sich nicht selbst überprüfen, da man die Überprüfung der eigenen Hashsumme im Zweifelsfall ändern (=entfernen) könnte.

    Habe mich nicht lange mit der Problematik befasst. Mag sein, dass ich etwas übersehen habe. Aber so lange du mein Argument nicht entkräftest, sehe ich da keinen Weg.

    Man kommt nicht um die Bytecode Kodierung herum. Selbst wenn deine Lösung funktionieren würde: Wann willst du die Hashummen übeprüfen? 500 KB Quelltext bei jedem Seitenaufruf hashen?
  • so nebenbei bin ich das doch
    Nun müsste nur noch diese "Schlüssel Datei" in der Lage sein breits in reintext form den hash wert ihrer eigenen verschlüsselten form zu kennen.


    Das schliest doch die verschlüsselung des Codes ein.

    In meinen Gedankengängen bin auch mittlerweile etwas weiter. Man müsste bei der Erstellung der Schlüsseldatei den eigenen Hashwert am besten erst in der letzten Zeile definieren. So kann man theor wenn man den Hash Algo kennt doch bestimmt den Hash fast gleichzeit mit der dateierstellung ziehen. Ich stell mir das irgendwie so vor, dass wohl für die letzte Zeile mit der eigenen Hashsumme viel Rechenpower von Nöten sein wird ... man muss ja immer wieder neu encoden berechnen un prüfen um eine einzige stelle mehr der korrekten hash zahl ermitteln zu können. Und das immer bedenkend, dass noch ein "'; ?>" nach der Hashsumme an das Ende der Datei muss.

    Der Zustand an sich, das eine Datei ihren eigenen Hashwert enthält, ist theor. wohl möglich. Ich frag mich nur langsam ob es überhaupt einen möglichen Weg gibt diesen Zustand gewollt zu erreichen.
    Schreib Artikel gegen Geld - Lupuz.de - Die offene Artikel Community
  • hallo

    Also ich bin der Meinung... Hab mich auch viel mit der sache mal auseinandergesetzt, noch zu c-64 Zeiten mit Assembler (kommt dies eigendlich gleich hin)...

    es muss immer ein Teil vorher sein, der den Festen bestanteil errechnet (hashWert) und diesem dann in ein anderes proggy (hier html oder PHP) setzt und von da aus überprüft... es gibt noch die Möglichkeit die Seite zu verschlüsseln, so das man da nicht so einfach dran kommt und den schlüssel noch mal überprüft und so weiter...

    also in endefekt bin ich Trotz verschlüsselung und überprüfung zu den ergebniss gekommen, wenn einer will, dann kann er auch dies Hacken... egal wie man es anstellt... (bei mein Script hatte mein Bruder Probs (trotz gleichen Assemblerlevel wie ich) aber hat es doch noch geschafft)...

    in diesem Sinne, anfänger habens schwer aber welche die sich damit auskennen ist es ein kleines Ding...

    greets