Verhindert, dass die HTML-Formularaktion geändert wird

8

Ich habe ein Formular auf meiner Seite, auf dem Nutzer ihre Kreditkartendaten eingeben. Ist es in HTML möglich, die Aktion des Formulars als konstant zu markieren, um zu verhindern, dass schädliches JavaScript die Aktionseigenschaft des Formulars ändert? Ich kann mir einen XSS-Angriff vorstellen, der die URL des Formulars ändert, damit Benutzer ihre geheimen Daten auf der Website des Angreifers veröffentlichen.

Ist es möglich? Oder gibt es eine andere Funktion in Webbrowsern, die diese Art von Angriffen verhindert?

    
Michał Fronczyk 19.09.2011, 19:01
quelle

2 Antworten

5

Diese Art von Angriff ist möglich, aber dies ist der falsche Weg, dagegen zu verhindern. Wenn ein Hacker die Details des Formulars ändern kann, kann er die geheimen Daten genauso einfach über ein AJAX GET senden, ohne das Formular überhaupt zu senden. Der richtige Weg, um einen XSS-Angriff zu verhindern, besteht darin, sicher zu stellen, dass alle nicht vertrauenswürdigen Inhalte auf der Seite so verschlüsselt werden, dass ein Hacker nicht in der Lage ist, sein eigenes JavaScript überhaupt auszuführen.

Mehr zur Codierung ...

Beispielcode in StackOverflow ist ein großartiges Beispiel für die Codierung. Stellen Sie sich vor, was für ein Durcheinander es wäre, wenn jedes Mal, wenn jemand ein Beispiel-JavaScript veröffentlicht, es tatsächlich im Browser ausgeführt wird. Z. B.

<script type="text/javascript">alert('foo');</script>

Wäre SO nicht für das obige Snippet kodiert worden, hätten Sie gerade eine Alarmbox gesehen. Dies ist natürlich ein ziemlich harmloses Skript - ich hätte etwas JavaScript codieren können, das Ihr Session-Cookie entführt und an evil.com/hacked-sessions gesendet hat. Glücklicherweise geht SO jedoch nicht davon aus, dass alle gut gemeint sind, und kodiert den Inhalt tatsächlich. Wenn Sie beispielsweise eine Quelle anzeigen würden, würden Sie sehen, dass SO mein perfekt gültiges HTML und JavaScript in dieses codiert hat:

&lt;script type="text/javascript"&gt;alert('foo');&lt;/script&gt;

Anstatt also die tatsächlichen < und > Zeichen dort einzubetten, wo ich sie verwendet habe, wurden sie durch ihre HTML-kodierten Entsprechungen ( &lt; und &gt; ) ersetzt, was bedeutet, dass mein Code nicht mehr repräsentiert ein Skript-Tag.

Wie auch immer, das ist die allgemeine Idee hinter der Kodierung. Für weitere Informationen zu wie Sie verschlüsseln sollten, kommt es darauf an, was Sie serverseitig verwenden, aber die meisten Web-Frameworks enthalten eine Art "out-of-the-box" HTML-Codierungsdienstprogramm . Es liegt in Ihrer Verantwortung sicherzustellen, dass vom Benutzer bereitgestellte (oder anderweitig nicht vertrauenswürdige) Inhalte IMMER codiert werden, bevor sie gerendert werden.

    
jmar777 19.09.2011, 19:06
quelle
1

Nein, nichts, um es wirklich zu verhindern.

Das Einzige, was ich vorschlagen könnte, ist eine serverseitige Validierung aller Informationen, die von einem Benutzerformular zum Server kommen.

Wie das Sprichwort sagt: Traue niemals dem Benutzer

    
Neal 19.09.2011 19:04
quelle

Tags und Links