2016-05-11 14 views
3

Die Anwendung, an der ich arbeite, hängt von vielen Popups ab. Diese Popups verlassen sich auf Abfragezeichenfolgen. Wenn jemand die URL einfach in die Adresszeile des Browsers eingeben kann, wird auf der Seite ein Fehler ausgegeben, da die Werte der Abfragezeichenfolgen dynamisch erstellt werden.Kann verhindert werden, dass ein Popup direkt geöffnet wird und nicht von Javascript geöffnet wird?

Gibt es einen Grund, die Anzeige der Seite zu verhindern, wenn der Anforderer der Seite kein Javascript ist? Wenn jemand etwas wie folgt eingibt:

https://mycompanyname.com/path/mypopup.aspx 

Es sollte nicht der Benutzer so tun. Oder zumindest überprüfen, ob der Anforderer kein Javascript ist, damit ich eine Nachricht anzeigen oder den Benutzer auf eine andere Seite umleiten kann? Andernfalls wird die Seite ohne die Daten, die zum Erstellen einer Anforderung benötigt werden, eine Ausnahme auslösen.

Danke für Ihre Hilfe.

+2

Warum ein Popup-Fenster? Standardpraktiken sind nun, ein Popup im Kontext der Webseite selbst über ein CSS- und JavaScript-Framework zu verwenden.Beispiele sind Bootstrap-Modale, jQuery-Dialoge usw. – mason

+0

Es ist eine bestehende Anwendung. Ich arbeite gerade weiter. – Richard77

+0

Warum nicht die Gelegenheit nutzen, eine veraltete Praxis zu korrigieren, die zu einer schlechten Benutzererfahrung führt? – mason

Antwort

1

Überprüfen Sie die Abfragezeichenfolge direkt in myPopup.aspx, wenn etwas fehlt, nur umleiten oder eine Nachricht anzeigen.

Verwenden Sie die Request.QueryString-Auflistung zum Überprüfen in myPopup.aspx.

Es gibt keinen einfachen Weg zu validieren, wenn die Anfrage von Javascript kam, soweit ich weiß. Sie könnten versuchen, ein Token zu erstellen, um zu bestätigen, dass der Absender der erwartete ist. Wenn Sie jedoch nur die Parameter überprüfen müssen, müssen Sie sich keine Gedanken darüber machen, wer die Anfrage sendet.

1

Die Seite kann nicht unterscheiden, wie sie angefordert wurde, wenn beide Anfragen von demselben Browser stammen.

Sie können jedoch in die Abfragezeichenfolge aufnehmen, um sie zu unterscheiden.

Zum Beispiel

window.open("mypopup.aspx?request=javascript&id=" + id); 

Wenn ein Benutzer absichtlich in https://mycompanyname.com/path/mypopup.aspx?request=javascript geben, soll es so sein. Ich werde mir keine Sorgen machen.

+0

Das könnte auch eine Antwort sein, denn wenn man weiß, dass das Popup von JS erstellt wurde, könnte das bedeuten, dass alle Parameter vorhanden sind. – Richard77

1

Popups sind auch Browserfenster. Es wird also schwierig zu überprüfen, ob das Fenster, das die Seite anfordert, ein normales Fenster oder Popup ist.

  1. Sie sollten die Benutzer beschränken, um zu sehen, auf welcher URL das Popup geöffnet wird, können Sie die Adressleiste ausblenden. So kann der Benutzer nicht kopieren oder wissen, was in der URL ist. window.open('/pageaddress.html','winname','directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,width=400,height=350');

  2. Eine Token-basierte Validierung einrichten. Machen Sie eine Anfrage an den Server (Ajax request), um ein zufälliges Token zu erhalten (mit einem Zeitüberprüfungsmechanismus und verfallen es). Sie können das Token in der Abfragezeichenfolge senden und es auf dem Server validieren, wenn es dasselbe ausgegebene Token ist. Identifizieren Sie, ob die angeforderte Seite ein gültiges Token hat (Popup), andernfalls verweigern Sie die Anfrage oder zeigen Sie eine Fehlermeldung an. Denken Sie daran, wie captcha funktioniert, Sie müssen es nur programmgesteuert tun.

Obwohl es auch nicht die beste Lösung als Token-Informationen können durch den Netzwerkverkehr-Tracker-Tools wie Fiddler geschnüffelt werden, aber es ist wird manuelle Anfragen zu verhindern, arbeiten.

+0

Sie können Adressleiste in neuen Browsern aus Sicherheitsgründen nicht mehr ausblenden. – Win

Verwandte Themen