Wie kann verhindert werden, dass Benutzer von einer lokal gespeicherten Html-Anmeldeseite aus auf eine Webanwendung zugreifen?

9

Ich habe eine Webanwendung, die von vielen nicht technischen Benutzern verwendet wird. Ich habe festgestellt, dass mehrere dieser Benutzer die Anmeldeseite der Anwendung auf ihren Desktops speichern (wodurch auch die zugehörigen CSS- und JS-Dateien gespeichert werden). Um dann die Anwendung zu starten, doppelklicken Sie auf das Desktopsymbol, das die lokale Kopie mit dem Protokoll file: // anzeigt.

Dies kann später Probleme verursachen, z. wenn ich das Login-Formular ändere, oder die URL, auf die es posten soll usw. Auch bestimmte Javascript-Dienstprogramme, z.B. PIE.htc funktioniert nicht mit dem Protokoll file: //.

Offensichtlich sollten sie ein Browser-Lesezeichen / Favoriten speichern. Ich suche nach einer Möglichkeit, diese Benutzer zu erkennen und zu warnen, ohne den Rest zu verwirren. Ich habe einige Javascript verwendet, um diese Benutzer zu warnen:

%Vor%

Aber dies wird nur Benutzer warnen, die die Desktop-Kopie gespeichert haben, seit ich dieses Stück Javascript hinzugefügt habe.

Hat jemand anderes dieses Problem gehabt und schlaue Lösungen entwickelt, die sie gerne teilen würden?

Danke

Aktualisierung:

Am Ende entschied ich, dies zu tun, indem ich einen Cookie mit einem Nonce-Wert bei der Anforderung der Anmeldeseite setzte und den gleichen Wert wie ein verborgenes Feld im Formular speicherte. Überprüfen Sie dann im Formularübergabe-Handler, ob die beiden identisch sind, und zeigen Sie eine Fehlermeldung an, falls dies nicht der Fall ist. Man könnte das Nonce in einer Sitzung statt eines Cookies speichern, aber ich möchte keine unnötigen Sitzungen erstellen.

Wenn der Benutzer die Anmeldeseite lokal gespeichert hat, hat er wahrscheinlich im gesicherten Formular andere Nonce-Werte als der Cookie (wenn sie überhaupt einen Cookie haben).

Normalerweise würde man einem Login-Formular keinen CSRF-Schutz hinzufügen (das ist so etwas), aber es erfüllt meine Anforderungen. Ich habe über diese Technik im Register Ссылка gelesen, Google hat einen ähnlichen Schutz für ihre Anmeldeformulare implementiert , um vor dem Schmieden von Login-Anfragen zu schützen, Ссылка .

    
Barry Pitman 31.01.2012, 13:07
quelle

6 Antworten

1

Vielleicht Kekse? Wenn die Site mit file:\ läuft, gibt es wahrscheinlich keine Cookies innerhalb der Anfrage. (Natürlich sollten Sie jetzt einige Cookies (Sitzungsdaten) auf Ihrer Anmeldeseite hinzufügen.

Lesen Sie auch über CSRF Ссылка und die Verhinderungsmethode.

    
IProblemFactory 31.01.2012, 13:15
quelle
2

Ich denke, Ihre beste Wette besteht darin, die Benutzer dazu zu bringen, Lesezeichen zu verwenden, anstatt physische Dateien zu speichern.

Abgesehen davon gibt es wahrscheinlich eine Möglichkeit, eine Verknüpfung zu Ihrer URL zu erstellen, vielleicht während der Anmeldung?

    
Tim 31.01.2012 13:15
quelle
1

Sie könnten wahrscheinlich den http-Referrer auf der Serverseite überprüfen und Benutzer warnen, die nicht von Ihrem gehosteten Login-Formular kommen.

Bearbeiten:

Tatsächlich wurde vorher eine vage ähnliche Frage gestellt und eine gute Erklärung erhalten, warum Referrer keine ideale Lösung ist und auch eine alternative Lösung bietet: Wie überprüfe ich, ob eine Anfrage vom selben Server oder von einem anderen Server kommt?

    
Till 31.01.2012 13:14
quelle
1

Warum setzen Sie statt der Warnung eine Weiterleitung auf Ihre Seite?

%Vor%

Oder Sie können ein erneutes Laden mit window.location.reload();

erzwingen     
Pedro Quintairos 31.01.2012 13:17
quelle
0

Anstelle der Nachricht können Sie Ihren Benutzer auf die reale Seite umleiten, die ein Login-Formular hat, oder die Hilfe-Box anzeigen, die erklärt, dass der Benutzer die Seite auf diese Weise speichern soll.

    
Seagull 31.01.2012 13:14
quelle
0

Sie können eine Sitzungsvariable festlegen, die im Formular als versteckte Variable festgelegt ist. Wenn dies nicht der Fall ist, leiten Sie zu Ihrem Login-Formular um.

    
malonso 31.01.2012 13:20
quelle