Forum
Tipps
News
Menu-Icon

PHP-Skript - Sachen verstecken

Hallo,

Ich habe ein PHP-Script wo
$Password='Password';
drin steht...

nun ruf ich die Datei via include(''); auf
Danach teste ich ob das eingegebene $_POST['Password']==$Password ist...
wenn nicht leite ich durch einen header(); wieder auf die Datei, wo die eingabe gemacht wurde zurück

Ist das sicher oder kann jemand ein derartiges Sicherheitssystem leicht knacken?

Meister Falke


Antworten zu PHP-Skript - Sachen verstecken:

Hi,
das Gelbe vom Ei ist es noch nicht, besser ist es, das PW in einer Datenbank verschlüsselt zu lagern.
Auch ist das Prüfen der Benutzerangaben nur die halbe Miete. Authenifizierung ist ein sehr komplexes Thema. Was hast Du denn vor/wie sicher muss es werden?

Folgendes habe ich vor:

Ich entwickele meine HP...
Dort drin baue ich einen geschützten Bereich für meine Freunde.
Wenn jetzt jemand von meinen Freunden seinen Benutzernamen angibt, wird die Datei (Login/Eigegebener_Name.php ) auf existenz überprüft und aufgerufen. Wenn der User registriert ist (datei vorhanden) wird das eigegebene Password mit dem Password aus der PHP-Datei verglichen. Ist es korrekt wird der Login-Cookie erstellt.

Das mit dem Verschlüsseln und den Datenbanken kann ich leider noch nicht :( . Falls du nen gutes Buch oder nen guten Link dazu hast, nur her damit ;D

Meister Falke

Wenn Du ein CMS benutzt -> die haben schon fertige Module.

Wenn es eine sehr übersichtliche Zahl von Usern ist, wäre auch das Verwenden der .htaccess 'ne gute Option. Sieht zwar nicht so gut aus, ist aber relativ sicher und ohne großen Aufwand zu realisieren.

Einen wirklich guten Link zu der Thematik Sessionsicherheit/Benutzerauthentifizierung habe ich leider nicht, kenne dazu nur "richtige" Bücher(leider).

Ich weiß nicht genau was ein CMS ist...
Meinen Webspace beziehe ich über Limacity und mein Script ist 100% selbst programmiert und nicht mit Websitebaukästen... Glaube nicht, dass ich ein CMS habe :-\

...kenne dazu nur "richtige" Bücher(leider).

Kannst mir paar Beispiele nennen?
 

Dann ist es kein CMS :D

wenns jetzt nur um die Veschlüsselung in MySQL geht, wirst Du mit "MySql+MD5" reichlich fündig (bin jetzt zu faul zum Selbersuchen :P)

Zur Authentifizierung und Sessionsicherheit:
z.B. "Professionelle PHP5-Programmierung" von George Schlossnagel.
Da steht viel über das Thema drin, setzt aber schon ne Menge an Kenntnissen in Objektorientierung voraus.

@strough und @MBGucky haben da bestimmt auch noch Ideen zu Literatur.

Trotzdem lass Dir mal die .htaccess "durch den Kopf gehen". Wäre nicht die schlechteste Lösung.

Ich werd ma schaun, was ich mach,
danke für die Hilfe :D

Schönen Rest-Sonntag,
Meister Falke

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

@strough und @MBGucky haben da bestimmt auch noch Ideen zu Literatur.
Ich fühle mich geehrt, an dieser Stelle genannt zu werden. In der Tat kann ich zumindest keine Bücher nennen, die da weiterhelfen, da die einzigen Bücher die ich lese solche der Reihe "Perry Rhodan" sind ;)

Aber ich kann folgenden Tip geben:

Bau Dir zunächst ein ganz einfaches Formular mit einer Texteingabe und gib bei der Verarbeitung einfach nur folgendes aus:

echo md5($_POST['eingabe']);
Du erhälst den md5-verschlüsselten Code des eingegebenen Strings (z.B. des Passwortes). Jetzt setzt Du in Deiner Passwortüberprüfung folgendes ein:

if(md5($_POST['Password']) == $password){
echo'eingeloggt';} else {die('Falsches Passwort');}

wobei $password der über obiges Formular generierte md5-hash ist. die if-Anweisung kannst Du natürlich beliebig variieren.

Der Vorteil dieser Vorgehensweise ist, dass das Passwort nicht mehr in Klartext in der Datei steht. Noch ein bisschen sicherer wäre es tatsächlich, wenn der md5-code in der Datenbank gespeichert wäre.

Die md5-Kodierung kann man nicht einfach dekodieren. Das geht nur mit so genannten hash-tables (Tabellen, in denen alle möglichen Passwörter als Klartext und md5 gelistet sind.) Es empfiehlt sich also, nicht zu einfache Passwörter zu verwenden.

Es gibt noch einige weitere Möglichkeiten, das ganze noch sicherer zu machen (z.B. mit Captcha), wenn es aber nur ne Seite für Freunde ist, wäre das zu kompliziert.

Oder:

Trotzdem lass Dir mal die .htaccess "durch den Kopf gehen". Wäre nicht die schlechteste Lösung.

Das ist zwar nicht die schönste, aber die effektivste Methode der Passwortabsicherung, sofern Dein Hoster .htaccess unterstützt.


nun ruf ich die Datei via include(''); auf

Hier noch ein Hinweis:

Wie rufst Du die Datei denn genau auf?
Du müsstest schon ein wenig vorsichtig mit der include-funktion umgehen. ein einfaches file_exists() reicht dabei nicht aus. Du musst auch auf Sonderzeichen prüfen und solltest die Dateien in einem separaten Verzeichnis haben.

Sonst kann man mit dem Vornamen "../index.php?" eine ganz andere Datei aufrufen und schon ist man drin.

Nachtrag:
Ist es korrekt wird der Login-Cookie erstellt.

ich würde ganz am Anfang mit session_start(); eine Session starten und dann nur in einer Session-Variablen den Login-Status speichern. Session-Variablen werden im Gegensatz zu Cookies nicht auf dem Rechner des Besuchers gespeichert.
« Letzte Änderung: 14.11.10, 13:49:54 von MBGucky »

Wow danke für die ausführliche antwort!

Nen Capatcha hab ich scho drin, dass man in dem Formular nicht nur Username und Password, sondern auch ne kleine Lösung einer Matheaufgabe eingeben muss ;D, damit man kein Programm, dass alle Passwordmöglichkeiten durchgeht draufjagen kann.

Das Problem mit dem Include hab ich auch schon erkannt
ich hab die Dateien deshalb in nem Seperaten ordner "Login/"

if (file_exists("Login/".$_POST['Username']."php"))
{
include ("Login/".$_POST['Username']."php");
}

ist das soweit sicher? eigentlich müsste man damit ja keinen mist bauen können oder?

Das mit dem md5 ist echt nen geiler Tipp, danke!! Ich hab mich immer schon gefragt, wie ich das mit der Verschlüsselung hinbekomm.

Ich werd mir alle Möglichkeiten mal anschauen ;D

Nochmals danke!!

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Das Problem mit dem Include hab ich auch schon erkannt
ich hab die Dateien deshalb in nem Seperaten ordner "Login/"

if (file_exists("Login/".$_POST['Username']."php"))
{
include ("Login/".$_POST['Username']."php");
}

ist das soweit sicher? eigentlich müsste man damit ja keinen mist bauen können oder?

Wenn Du jetzt noch mal an meine Zeile denkst:


Sonst kann man mit dem Vornamen "../index.php?" eine ganz andere Datei aufrufen und schon ist man drin.


Dann steht da effektiv:

include("Login/../index.php?nachname.php");

wobei das nachname.php ignoriert wird, weil es hinter dem ? steht und somit für eine GET-Variable gehalten wird. Du musst also definitiv prüfen, ob sich in Vorname und Nachname Sonderzeichen befinden. Auch sollte es keine doppelten Vornamen (Hans Peter) geben, da Leerzeichen je nach OS falsch interpretiert werden können. Das gäbe dann zwar nur eine Fehlermeldung, aber schön ist es halt nicht.

Nachtrag:

if(preg_match("/^[a-zA-Z0-9]+$/",$_GET['Username'])){
// Passwort prüfen
} else {
die('ungültiger Username');
}
« Letzte Änderung: 14.11.10, 14:15:23 von MBGucky »

Durch dich werd ich noch richtig gut ;D

Danke vielmals!!!!!

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Sry, hab auch keinen wirklich guten Link parat.
Das Thema "Sicherheit" ist in erster Linie ein Prozess, so richtig fertig ist man da nie mit basteln. Kommt natürlich auch drauf an wie freakig das ganze werden soll.

Spontan fällt mir nur auf dass man md5 kaum noch nutzt, stattdessen eher sha, Stichwort "salt" hier noch nicht mal erwähnt wurde und der TO die Formular Daten im Skript verwendet ohne sie vorher zu prüfen.

Das geht natürlich in jedem Fall noch besser aber kommt halt auch drauf an wie sicher es wirklich werden soll.
Gerade bei Passwörtern kannst dir Mühe geben wie du willst, wirst aber dennoch scheitern wenn deine User an passwortsicherheit kein Interesse haben.

Das fängt bei "banaleren" Passwörtern an, geht über "im Browser speichern" bishin dazu, dass immer noch viele dasselbe Passwort auf vielen Seiten benutzen. Als Webbi kannst da recht wenig tun.

Selbst die Geschichte von wegen dass man selbst ein komplexeres Passwort erstellt und inkl. Freischaltlink als Email versendet macht bei genauerer Betrachtung wenig Sinn wenn das Passwort danach nicht vom User geändert wird.

Ohne Info wie sicher, Sicherheit sein soll würde ich auch nur sagen dass das ganze in einer Datenbank besser passen würde (auch vom administrativen Aufwand her), so ists dann auch noch punkto Userlevel beliebig anpass- und ausbaubar.
bei einer htaccess kannst das problem haben dass irgendwann, irgendwer da einfach mal nur reingucken will, dummerweise speichert udn legt dir damit die ganze website lahm. automatisiert dateien für jeden user anlegen kann irgendwann auch nervig werden wenn man mal umzieht. das mit dem chmod kann teilweise bei einem umzug, super nervig sein. (zeitnot)


« InternetansichtNavigation »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Auslagerungsdatei
Die Auslagerungsdatei, auch bekannt als virtueller Speicher, ist ein wichtiges Element im Windows-Betriebssystem. Sie dient als Erweiterung des physischen Arbeitsspeicher...

Dateiendungen
Die Dateiendung, auch Dateinamenerweiterung, Dateierweiterung oder einfach "Endung" genannt, besteht aus meistens drei oder vier Buchstaben und wird mit einem Punkt an de...

Dateisystem
Das Dateisystem eines Computers definiert, wie Daten auf einem Speichermedium organisiert werden. Es bestimmt dabei, wie die Informationen auf dem Medium gespeichert, gel...