So vermeiden Sie "Cross-Site Script Attacks"

7

Wie vermeiden Sie Cross-Site-Skript-Angriffe?

Cross-Site-Skript-Angriffe (oder Cross-Site-Scripting ) ist, wenn Sie zum Beispiel ein Gästebuch auf Ihrer Homepage haben und ein Kunde einen Javascript-Code postet, der Sie auf eine andere Website umleitet oder Ihre Cookies in einer E-Mail an bösartige sendet Benutzer oder es könnte eine Menge anderer Dinge sein, die sich als sehr schädlich für Sie und die Leute erweisen können, die Ihre Seite besuchen.

Ich bin mir sicher, dass es fx gemacht werden kann. in PHP durch Validierung von Formularen , aber ich bin nicht erfahren genug, um fx. Verbanne Javascript oder andere Dinge, die dir schaden können.

Ich hoffe, Sie verstehen meine Frage und Sie können mir helfen.

    
Latze 09.08.2010, 11:48
quelle

2 Antworten

12
  

Ich bin mir sicher, dass es fx gemacht werden kann. in PHP durch Validierung von Formularen

Nicht wirklich. Die Eingangsstufe ist völlig falsch, um XSS-Probleme anzugehen.

Wenn der Benutzer <script>alert(document.cookie)</script> in eine Eingabe eingibt, ist daran nichts falsch. Ich habe es gerade in dieser Nachricht getan und wenn StackOverflow es nicht erlaubte, hätten wir große Schwierigkeiten, über JavaScript auf der Seite zu sprechen! In den meisten Fällen möchten Sie jede Eingabe (*) zulassen, damit Benutzer ein Zeichen < verwenden können, um buchstäblich ein Kleiner-als-Zeichen zu bedeuten.

Die Sache ist, wenn Sie Text in eine HTML-Seite schreiben, müssen Sie ihn für den Kontext, in den er geht, korrekt entschlüsseln. Für PHP bedeutet dies htmlspecialchars() in der Endstufe zu verwenden:

%Vor%

[PHP-Hinweis: Sie können sich selbst eine Funktion mit einem kürzeren Namen definieren, um echo htmlspecialchars zu verwenden, da dies jedes Mal, wenn Sie eine Variable in HTML einfügen möchten, ziemlich viel zu tun ist.]

Dies ist unabhängig davon, woher der Text stammt, unabhängig davon, ob er von einem vom Benutzer übermittelten Formular stammt oder nicht. Während von Benutzern eingereichte Daten der gefährlichste Ort sind, um Ihre HTML-Codierung zu vergessen, geht es in Wirklichkeit darum, dass Sie eine Zeichenfolge in einem Format (einfacher Text) verwenden und sie in einen Kontext in einem anderen Format (HTML) einfügen. Jedes Mal, wenn Sie Text in einen anderen Kontext werfen, benötigen Sie ein Codierungs- / Escapeschema, das für diesen Kontext geeignet ist.

Wenn Sie beispielsweise Text in ein JavaScript-String-Literal einfügen, müssen Sie das Anführungszeichen, den umgekehrten Schrägstrich und die Zeilenumbrüche umgehen. Wenn Sie Text in eine Abfragekomponente in einer URL einfügen, müssen Sie die meisten nicht alphanumerischen Zeichen in %xx -Sequenzen konvertieren. Jeder Kontext hat seine eigenen Regeln; Sie müssen wissen, welche die richtige Funktion für jeden Kontext in Ihrer gewählten Sprache / Framework ist. Sie können diese Probleme nicht lösen, indem Sie Formulareingaben in der Eingabestufe migrieren - obwohl viele naive PHP-Programmierer es versuchen, weshalb so viele Apps Ihre Eingaben in Ecken fälschen und trotzdem nicht sicher sind.

(*: naja, fast alle. Es gibt ein vernünftiges Argument, um die ASCII-Steuerzeichen aus dem gesendeten Text herauszufiltern. Es ist sehr unwahrscheinlich, dass es ihnen gut tut, sie zuzulassen.  Außerdem werden Sie natürlich anwendungsspezifische Validierungen durchführen müssen, z. B. um sicherzustellen, dass ein E-Mail-Feld wie eine E-Mail-Adresse aussieht oder dass Zahlen wirklich numerisch sind. Dies kann jedoch nicht auf alle Eingaben angewendet werden, um Probleme zu vermeiden.)

    
bobince 09.08.2010, 12:52
quelle
9

Cross-Site-Scripting-Angriffe (XSS) treten auf, wenn ein Server Eingaben vom Client akzeptiert und diese Eingaben dann blind auf die Seite schreibt. Der größte Teil des Schutzes vor diesen Angriffen besteht darin, die Ausgabe zu umgehen, sodass das Javascript in einfaches HTML umgewandelt wird.

Beachten Sie, dass nicht nur Daten direkt vom Client stammen, die einen Angriff enthalten können. Bei einer Stored XSS -Attacke wird schädliches JavaScript in eine Datenbank geschrieben, deren Inhalt dann von der Webanwendung abgefragt wird. Wenn die Datenbank separat vom Client geschrieben werden kann, kann die Anwendung möglicherweise nicht sicher sein, dass die Daten ordnungsgemäß maskiert wurden. Aus diesem Grund sollte die Webanwendung ALLE Daten behandeln, die sie auf den Client schreibt, als ob sie einen Angriff enthalten könnten.

Sehen Sie diesen Link für eine gründliche Quelle, wie Sie sich schützen können: Ссылка

    
danben 09.08.2010 11:56
quelle

Tags und Links