2009-03-22 5 views
1

Wir haben eine J2EE Web-Anwendung Using Spring MVC. Wir haben eine neue Anforderung für unsere Webanwendung, bei der wir bestimmte vordefinierte Zeichen aus der Benutzereingabe entfernen müssen. Angenommen, die Anwendung sollte "<" von allen Benutzereingaben entfernen. Ich habe mit zwei Ansätzen kommen diese Anforderung zu erfüllen:Wie können vordefinierte Zeichen von Benutzereingaben in einer J2EE-Webanwendung entfernt werden?

  1. JSP Level: identifizieren jeden einzelnen jsp die Benutzereingabe erlaubt und dann die Zeichen von Client-Seite Verarbeitung entfernen.

  2. Servlet-Filter: Verwenden Sie einen Filter und fangen Sie das Anfrageobjekt ab. Hier kann ich einen der folgenden zwei Ansätze verwenden:

    2.1: Überschreiben Sie die request.getParameter-Methode und schreiben Sie die Zeichenlöschungslogik darin. Wenn diese Methode aufgerufen wird, wird das gefilterte Ergebnis zurückgegeben.

    2.2: Scannen Sie auf der Filterebene die Parameterkarte und filtern Sie die erforderlichen Zeichen. Schreiben Sie dann eine setParameter-Methode und legen Sie die neuen Werte in der Anforderungs-Parameterzuordnung fest.

Welchen Ansatz schlagen Sie vor? Hat der Filter Auswirkungen auf die Leistung? Wenn Sie sich einen besseren Ansatz vorstellen können, lassen Sie es mich wissen.

+0

Aus Neugier, machst du das unter dem Gesichtspunkt der Sicherheit? –

Antwort

2

Sie können clientseitige Filterung durchführen, wenn Sie möchten, aber Sie sollten sich absolut nicht darauf verlassen. Clients können Javascript deaktivieren. Sie können auch einfach posten, was sie wollen, wenn es darauf ankommt. Clientseitige Validierung ist eine Annehmlichkeit. Es ist kein Ersatz für die serverseitige Validierung.

Wie für die Verwendung von Servlet-Filter, bin ich nicht sicher, dass ich ein großer Fan davon bin. Es scheint so (und ich könnte mich hier irren) du versuchst dich vor faulen, vergesslichen oder einfach nur unbeholfenen Entwicklern zu schützen.

Auch wenn Sie HTML zu irgendeinem Zeitpunkt zulassen (wie diese Website tut), können Sie diese Art von Sache nicht als eine universelle Regel einführen. Diese Art von Dingen sollten dort behandelt werden, wo Sie alle anderen Validierungen durchführen. Setzen Sie Komponententests um, wenn Sie sich wirklich Sorgen machen.

Servlet Filter scheint nur schwer und möglicherweise problematisch dafür.

Sie verwenden Spring MVC. Verwenden Sie ein bestimmtes Validierungs-Framework hinter den Validatoren von Spring? Was auch immer der Fall ist, IMHO ist dies der richtige Ort, um mit dieser Art von Problemen fertig zu werden und leicht in Einheiten testbar zu sein [sic].

Ich denke, das ist der richtige Punkt für diese Art von Sache.

Alles was gesagt wird, sehe ich keinen technischen Grund, warum Sie dies nicht mit SetParameter in einem Servlet-Filter tun könnten, wenn Sie wirklich so zu diesem Ansatz neigen. Ich würde das sicherlich tun, um SetParameter über die Servlet-Anfrage zu überschreiben. Kannst du das überhaupt machen? Selbst wenn du kannst, würde ich nicht.

+0

Wir verwenden Spring MVC Framework. Ich habe es auch zu der Frage hinzugefügt. Danke. –

0

Ich würde vorschlagen, dass Sie dafür reguläre Ausdrücke verwenden.

Soweit es zu sagen, es klingt wie es Geschäftslogik, so Servlet-Filter oder Jsp-Ebene klingen nicht als eine sehr gute Idee.

Ja, es wird die Leistung beeinträchtigen, aber es wird nicht auffällig oder kritisch sein.

1

Ich würde das Problem über Gesicht drehen. Gibt es das Problem, dass Benutzer Zeichen wie < in die Felder eingeben, oder die Tatsache, dass Sie nicht entkommen, wenn Sie sie auf einer Webseite erneut ausdrucken?

+0

Benutzer können die Zeichen eingeben. Der Client möchte sie nicht in der Datenbank speichern. Sie möchten auch keine Warnung oder Nachricht anzeigen, um den Benutzer darauf hinzuweisen, solche Zeichen nicht einzugeben. –

0

Ich lese gerade eine andere Stackoverflow Post, die hier helfen könnte Servlet Filter verwenden:

Modify Request Parameter with Servlet Filter

vernünftig scheint einen Servlet-Filter zu verwenden, wenn Sie eine generischen genug zu machen, können die Daten für Ihre Bedürfnisse zu sanieren.

Verwandte Themen