2017-05-27 1 views
1

ich eine Website mit einer Reihe von verschiedenen Zugriffsebenen, von einfachen Benutzern bis zu Admin-Ebene (insgesamt 5) die Schaffungcsrf ... php Form Sicherheit

Manager und Admin Level haben die Möglichkeit, hinzufügen neue Benutzer auf einer Ebene gleich oder niedriger als sie sind, dies geschieht über ein Dropdown-Feld auf der CreateNewUser-Seite, ich habe bereits beschränkt, dass nur weniger als oder gleich zu ihrer eigenen Zugriffsebene zeigen ... aber .. Was ich versuche zu stoppen ist das ...

Benutzer lädt die Website, ruft eine Kopie des Formulars Formular die Quelle (einschließlich der CSRF-Token) erstellt ein einfaches HTML-Formular auf dem Desktop ändert die Zugriffsebene Einstellungen und sie könnten in der Tat sehr einfach eine Admin erstellen l evel Konto ...

ist es eine Möglichkeit, dies mit CSRF zu stoppen ... oder sollte ich vertrauen nur auf den Ursprung zu stoppen kommen von einem ‚off-Server‘ Quelle

Ich würde auch einige schätzen Tipps über die besten Praktiken bei der Einstellung des CSRF das wieder wett ...

es auf der Website auch andere Formen gibt, die so denke ich, das zu sein, braucht eine pro Formularlösung

prost ähnliche Funktionen haben ... ohh und halte es so einfach wie möglich :)

Antwort

2

gibt es fügen Sie eine Möglichkeit, dies mit CSRF zu stoppen ... oder sollte ich vertrauen nur auf den Ursprung, es zu stoppen kommen eine 'Off-Server' Quelle

Nein, keiner der beiden Ansätze würde funktionieren. Ein Benutzer könnte genauso einfach neue Werte über den Web Inspector eingeben oder ein CSRF-Token von der realen Seite kopieren.

ÜBERPRÜFEN SIE IHRE EINGÄNGE !! Wenn ein Benutzer versucht, einen neuen Benutzer hinzuzufügen, sehen Sie sich deren Berechtigungen an, bevor Sie fortfahren können. Verlassen Sie sich nicht auf das Eingabeformular, um diese Einschränkungen anzuwenden. Das Anwenden von CSRF-Prüfungen ist aus anderen Gründen (z. B. um zu verhindern, dass eine böswillige Website die Sitzung eines Administrators entführt), dennoch eine gute Idee. Sie kann jedoch nicht vor einem autorisierten Benutzer geschützt werden.

+0

Prost, werde ich für diese Option gehen :) – Sandman112

0

dies ist, was ich verwende, ich hoffe, es

gute Lösung ist

auf der Hauptseite beginnen i-Sitzung und Session-Token generieren

session_start(); 

    if (empty($_SESSION['token'])) { 
     $_SESSION['token'] = bin2hex(random_bytes(32)); 
    } 

Ich bin2hex verwenden, aber Sie können auch andere Hash-Methoden versuchen.

auf Login PHP-Seite hinzufügen, um dieses

if (isset($_POST['Login']) && !empty($_POST['token'])) { 
    if (hash_equals($_SESSION['token'], $_POST['token'])) { 

    //execute script 
    } 
} 

überprüfen, ob Session-Token gestartet und wenn entspricht dem Eingangswert html.

diese versteckte Token Eingang zu Ihrem HTML-Formular für $_POST['token']

<input type="hidden" name="token" value="<?php echo $_SESSION['token'];?>"> 
+0

Das wird nicht wirklich das Problem des OP lösen, obwohl ... – duskwuff