Frage

Ich brauche für Session-Tracking versteckte Variablen in meinem JSP zu verwenden. Dies ist der Code:

<input type="hidden" name="REQ_TOKEN" value="<%=session.getAttribute("SESN_TOKEN").toString()%>" />

ich dies mit der Anforderung mit Session-Token Token zu vergleichen, so dass nur, wenn beide gleich ich diesen Antrag bewerten sonst werde ich einen Fehler aus.

Nun das Problem ist, wenn ich diesen Code in <form></form> Tags platzieren, es funktioniert gut. Leider gibt es einige JSPs in meiner Anwendung, wo wir <form> Tag nicht haben (ich weiß, das klingt seltsam!). Wo kann ich meinen Code so platzieren, dass es funktionieren wird?

Kann ich Versteckte Variablen nicht ohne <form> Tag?

War es hilfreich?

Lösung

Es klingt wie der versteckten Wert, den Sie beschreiben, ist das, was mehr wird allgemein bezeichnet als eine Nonce, die (wenn man über Web-Formulare im Gespräch) ist ein Wert verwendet, um zu überprüfen, dass ein Formular nur einmal gesendet wird, und von den gleichen Sitzung, die das Formular angefordert. Sehen Sie diese Hinweise zur Verhinderung Cross-Site-Request-Forgery .

Erstens: Wie werden Sie die Stellung der Anträge ohne <form>? Ist der Benutzer einfach Klicken auf einen Link? Wenn ja, können Sie die Nonce an die Query-String anhängen, aber wenn Sie GET-Anfragen verwenden für destruktive etwas, das tatsächlich erfordert Überprüfung eines Nonce, Sie tun es falsch. Diese Arten von Anfragen sollten nur über POST gemacht werden, was eine <form method="post"> impliziert erzeugen.

Zweitens, nein, man kann nicht <input type="hidden" /> außerhalb eines Formulars verwenden. Eine bestimmte Form trägt nur seine eigenen Werte, die Elemente zwischen <form> und </form> ist.

Wenn Sie Ihre verborgenen Wert wollen in den Daten enthalten sein werden gepostet Rücken, muss den versteckten Eingang in der Form vorgelegt werden. Wenn, wie Sie sagen, können Sie nicht die benötigten <form> Tags in Ihren JSP-Dateien enthalten, können Sie dynamisch die Anfrage per Javascript, aber Dies führt zu einer Abhängigkeit von Javascript, dass Sie für etwas so einfach vermeiden sollten und von grundlegender Bedeutung.

Andere Tipps

Soweit ich weiß, Sie müssen das versteckte Feld in einem Formular-Tag haben, um es richtig zu arbeiten. suchen sie nach wie vor, wird repost. Die Seiten so weit, dass ich sagen gefunden haben, dass sie in der Form sein sollte.

EDIT * roseindia.net/jsp/jspsession/HiddenForm

Wenn es nur für CSRF Prävention ist, dann brauchen Sie nicht es überhaupt auf formlos Seiten. Ganz einfach, weil es nichts zu schützen :) Der Punkt ist es in jedem <form method="post"> aufzunehmen, nicht in jedem Seite .

sagte, dass „Session-Tracking“ ist ein ganz anderes Konzept. Die HttpSession bereits tut genau das hinter den Kulissen mit Hilfe eines Cookies oder URL-Rewriting. Deshalb habe ich Ihre Frage zunächst gefunden verwirrend und einen Kommentar zur Klarstellung veröffentlicht. Sie befinden sich hier einfach nur „request tracking“ mit Hilfe einer Anfrage basierter Token, die Sie im Sitzungsbereich speichern (und entfernen, sobald die Anforderung übergeben hat), so dass Sie CSRF verhindern können.

Aktualisieren : Sie finden diese Antwort nützlich, um zu erfahren, was CSRF tatsächlich ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top