Wie kann verhindert werden, dass ein Benutzer den Prozess der zu befolgenden Schritte umgehen kann?

8

Ich habe einen Multi-Form-Assistenten, mit mehreren Schritten, die abgeschlossen werden müssen, dieses Skript wurde sehr anders als die normalen entwickelt, mein Skript vermeidet, dass die vom Benutzer gefüllten Daten verloren gehen und es vermeidet den Schritt des Benutzer.

Die Schritte des Skripts werden in einer Sitzung gespeichert, die es vermeidet, zum Anfang zurückzukehren und sie immer im aktuellen Schritt des Benutzers zu behalten.

Aber ich habe ein Schwachstellenproblem im Prozess der Schritte, die befolgt werden müssen.

Wenn ein böswilliger Benutzer die Werte der URL wie folgt ändert:

%Vor%

Dieser Benutzer kann die Schritte nach Ihrem Willen überspringen.

Beispiel: Der Benutzer befindet sich in Schritt 1, aber ich ändere die URL und wechsle automatisch zu Schritt 6.

Wie kann ich verhindern, dass sie das System necken, indem sie ein verstärktes Steuerelement mit PHP hinzufügen, bei dem ein Benutzer nicht von Schritt 1 zu Schritt 3 oder Schritt 6 springen kann, sondern die Reihenfolge der Schritte 1, 2, 3, 4,5, 6 und so weiter.

Mein Skriptassistent

%Vor%

HTML-Struktur

%Vor%

saveTemp.php Oder es ist möglich, die Schritte per POST-Methode anstelle der GET-Methode zu empfangen, um Änderungen in der URL (saveTemp.php? Step = 6)

zu vermeiden %Vor%     
So12 25.01.2018, 00:47
quelle

2 Antworten

14

Wenn Sie die Verarbeitung des Formulars abgeschlossen haben, fügen Sie den Schritt in eine Sitzungsvariable ein. Wenn Sie die nächste Einreichung bearbeiten, prüfen Sie, ob $step der nächste Schritt ist.

%Vor%

Wenn Sie am Ende des Skripts alle Informationen überprüft haben, speichern Sie den Schritt in der Sitzungsvariablen:

%Vor%

Vollständiger Code:

%Vor%     
Barmar 25.01.2018 00:55
quelle
1

Ich würde vorschlagen, dass Sie das einfach nicht tun.

Ich meine: Ich finde heraus, dass Sie auch Benutzereingaben validieren und Benutzern nicht erlauben, zum nächsten Schritt weiterzugehen, wenn der aktuelle nicht richtig ausgefüllt ist.

Und ich finde auch heraus, dass Sie Eingaben zumindest auf der Serverseite validieren.

Wenn keine Unterformulare standardmäßig gültig sind (ohne Benutzereingaben), oder wenn dies der Fall ist, können Sie einfach eine ausgeblendete Eingabe hinzufügen und diese bei einigen Ereignissen automatisch ausfüllen (z. B. form-step loaded); Das einzige, was Sie tun müssen, ist das erneute Validieren des gesamten Formulars (bis zum erforderlichen Schritt) jedes Mal, wenn ein Schritt angefordert wird.

Wenn der Client beispielsweise Schritt 6 anfordert, Schritt 5 jedoch nicht validiert wurde, senden Sie einfach den http-redirect-Header an Schritt 5 und optional einen minimalen HTML-Fehler, der genau das vorsieht und einen Link manuell bereitstellt.

    
bitifet 02.02.2018 13:43
quelle

Tags und Links