2009-01-05 4 views
12

Ich hatte eine Diskussion mit Kollegen. Wir müssen einige Sicherheitsstandards implementieren. Wir wissen nicht, dass vertrauliche Informationen, Adressen, Geburtsdaten in versteckten Feldern gespeichert werden sollen, aber es ist in Ordnung, versteckte Felder für Ihre Anwendung zu verwenden.Web-Sicherheit, gibt es Probleme mit versteckten Feldern (keine sensiblen Daten)?

Zum Beispiel:

action=goback 

Es scheint, wie es wäre sicherer für diese Art von Informationen versteckte Felder zu verwenden, wie zum Hinzufügen in dem Query-String entgegen. Es ist eine weniger Information, die ein Hacker gegen Ihre Anwendung verwenden könnte.

Antwort

19

Ein Hacker kann versteckte Felder genauso einfach wie Querystring-Werte mit einem abfangenden Proxy (oder einer beliebigen Anzahl von Werkzeugen) zugreifen.

Ich glaube nicht, dass mit der Verwendung versteckter Felder etwas falsch ist, solange sie nicht für etwas Sensitives verwendet werden, und Sie validieren sie wie jeden anderen Wert vom Client.

6

Ein Feld "versteckt" zu machen, hat so gut wie nichts mit Sicherheit zu tun und sollte als UI-Entscheidung betrachtet werden. Jeder "Hacker" liest Ihre HTML-Quelle trotzdem.

Besser weder sensible Informationen zu zeigen, noch, wenn Sie müssen, um SSL zu verwenden (um Datenabfangen durch Netzwerkintermediäre zu verhindern) und einige Kombination von Login-Herausforderungen (um unautorisierten Zugriff zu verhindern).

0

Ich würde sagen, dass dies nicht mehr oder weniger sicher ist, als das Element in die Abfragezeichenfolge zu platzieren. Immerhin könnte man die Quelle immer auf der Seite sehen (und es gibt keine Möglichkeit, dies zu verhindern, da man die Quelle immer programmatisch herunterladen könnte).

Eine bessere Lösung hier wäre, die Namen der Felder und die Werte mit einem Schlüssel zu verschlüsseln, der auf dem Server und nur dem Server generiert wird. Wenn der Server nicht gehackt wurde, würde der Client keine Ahnung haben, wie der Wert des Wertes lautet oder wie hoch der Wert ist.

Natürlich, da dies vom Client kommt, müssen Sie immer noch die Gültigkeit der zurückkommenden Daten prüfen, nehmen Sie nicht einfach an, dass es nicht in einer Weise geändert wurde, die Sie nicht geändert haben diktieren.

Zu diesem Zweck sollten Sie Hashing verwenden, um sicherzustellen, dass der Wert nicht manipuliert wurde.

5

Es ist nur eine Sicherheitslücke, wenn Sie Informationen bereitstellen, die dem Endbenutzer sonst nicht zur Verfügung stehen würden und/oder diese bei der Rückgabe nicht validieren.

ich stattdessen aussehen würde zu speichern die Information in einer Server-Seite Session-Variablen statt ...

0

Im Allgemeinen nicht versteckte Formularfelder für sensible Daten verwenden. Nur für statische nicht sensitive POST-Daten, die Sie erkennen, ist es nicht sicher, "wie es empfangen wurde" zu behandeln. Der einzige Zeitpunkt, an dem ich sie verwende, ist das Speichern von Sitzungstokens, so wie sie beim Empfang des POST gerendert und überprüft werden. CSRF-Angriffe zu verhindern oder zumindest erheblich zu erschweren.

4

Das Speichern Ihrer Daten in einem ausgeblendeten Feld ist aus Sicherheitsgründen genauso wie das Speichern in der Abfragezeichenfolge. Wenn das Formular die GET-Aktion verwendet, endet es tatsächlich in der Abfragezeichenfolge.

Versteckte Felder haben keinerlei Bezug zur Sicherheit; Sie sind einfach eine Methode, mit der Daten in einer Form ohne Forcen der Benutzer gespeichert werden können, um es zu sehen. Sie bieten keine Möglichkeit zu verhindern der Benutzer es zu sehen.

1

Wie andere Leute erwähnt haben, sind sowohl die Abfragezeichenfolge als auch ausgeblendete Felder im Wesentlichen öffentliche Daten, die vom Benutzer angezeigt werden können.

Eine Sache, die Sie beachten sollten, wenn Sie Daten in den Querystring legen, ist, dass Personen URLs weitergeben und daher niemals spezifische Informationen für den aktuellen Benutzer enthalten sollten.

Es ist wahrscheinlich auch eine gute Idee, keine Statusinformationen in die URL aufzunehmen, wenn dieser Status nicht direkt eingegeben werden kann. Zumindest müssten Sie ungültige Statusinformationen in der Querystring behandeln.

3

Versteckte Felder sind nicht immer ein Thema, aber sie sollten immer die Alarmglocken läuten, da sie zwei mögliche Probleme:

1) Wenn die Daten empfindlich ist, ist es an den Client macht (zB einen Proxy verwenden, oder einfach die Quelle anzeigen - und es ist sinnlos, dies programmgesteuert zu verhindern.

2) Wenn die Daten vom Server interpretiert werden, kann ein sachkundiger Benutzer sie ändern. Um ein dummeres Beispiel zu nehmen: Wenn das versteckte Feld den Banksaldo des Benutzers enthält, könnten sie einen Proxy oder einen nicht standardmäßigen Client verwenden, damit der Server denkt, dass sein Bankguthaben das ist, was er wählt.

Die zweite ist eine große Quelle von Sicherheitslücken in Webapps. Daten, die mit der Sitzung verknüpft sind, sollten serverseitig gehalten werden, es sei denn, Sie haben die Möglichkeit, sie auf dem Server zu validieren (z. B. wenn das Feld vom Server signiert oder verschlüsselt wurde).

Sofern Sie sicher sind, dass Sie nicht in eine dieser Fallen fallen, können sie in Ordnung sein. Als Faustregel würde ich versteckte Felder nur für Daten verwenden, die Sie gerne in der Abfragezeichenfolge sehen würden, oder wenn JavaScript sie zur Verarbeitung benötigt. In letzterem Fall müssen Sie noch sicherstellen, dass der Server validiert wird. Gehen Sie nicht davon aus, dass der Client Ihr Javascript ausführen wird.

0

Zusätzlich zu all den anderen nützlichen Tipps von anderen Postern, würde ich auch hinzufügen, dass versteckte Felder Ihre Anwendung nicht weniger anfällig für SQL-Injection-Angriffe machen, wie URL-Abfrage-String-Werte tun. Wie immer, saniere deine Eingabe.

1

Ziehen Sie in Betracht, den Namen und den Wert Ihres versteckten Feldes zu verschlüsseln, da die Hacker Ihre versteckten Felder immer noch manipulieren und manipulieren können.

Verwandte Themen