Kampf gegen Wiederholungsangriffe: Ein einfacher Weg zum Token-basierten Ansatz
Wiederholungsangriffe, bei denen Angreifer Netzwerkpakete abfangen und weitergeben, die nicht ihnen gehören, sind äußerst gefährlich und verursachen manchmal sogar schwerwiegende Schäden. Selbst auf verschlüsselten Kommunikationskanälen kann ein Angreifer solche Angriffe ohne Zugang zum Entschlüsselungsschlüssel starten. Ein Angreifer belauscht einfach in Ihre Linien und versteht die Aufgaben, die von einem bestimmten Satz von Paketen ausgeführt werden, grob und kann dann Ihre Kommunikation unterbrechen oder einen schwereren Schaden verursachen.
In diesem Artikel wird eine einfache und benutzerfreundliche grundlegende Methode vorgestellt, um zu verhindern, dass Websites den Wiederholungsangriffen unterzogen werden. Es hindert auch verärgerte Benutzer daran, die letzte Postanforderung während der falschen Zeit wiederholt zu wiederholen.
Dies ist weit entfernt von einer vollständigen Lösung. Es gibt Mängel und Probleme, die gelöst werden müssen, aber es gibt Ihnen eine grobe Vorstellung davon, wie Treue und einfache Protokolle die Sicherheit der Website verbessern können. Beispielcode und Implementierung werden mit ASP.NET und C#durchgeführt, das Konzept kann jedoch auf einer anderen Plattform oder Programmiersprache bereitgestellt werden.
Konzept des einmaligen Token
Die Kernidee der in diesem Artikel bereitgestellten Lösung besteht darin, jede HTTP -Antwort an eine Token -Zeichenfolge zu binden, die nur für die nächste Postanforderung gültig ist. Hier ist eine einfache Aufschlüsselung der beteiligten Schritte:
<input type="hidden">
-Tag der an den Client gesendeten Antwort eingebettet. Auf diese Weise kann die Anforderung nicht mehr wiederholt werden, wenn ein böswilliger Benutzer eine an den Server gesendete kritische Anforderung abfängt, da das in der Anforderung enthaltene Token nach dem Versenden an den Server nicht mehr gültig ist. Gleiches gilt für unachtsame Benutzer, die fälschlicherweise die F5 -Taste drücken und die Anfrage nach dem Veröffentlichen von Informationen an den Server wiedergeben.
Testumgebung
Um das Konzept eines einmaligen Tokens zu implementieren, erstellen wir eine Beispielseite mit einem einfachen Textfeld und einer Schaltfläche Senden. Wir werden auch eine Tag -Steuerung hinzufügen, um die Testausgabe anzuzeigen.
Der Hintergrundcode ist ein einfaches Snippet, das die Einreichungszeit sowie die im Textfeld enthaltenen Daten zeigt.
Dies ist die Ausgabe der Seite nach der ersten GET -Anforderung:
Nach dem Einreichen der Seite sieht die Ausgabe so aus:
Das Problem ist, dass der Server, wenn Sie die Seite aktualisieren, Ihre Daten erneut veröffentlichen und die letzte Anforderung wiederholen. Stellen Sie sich nun vor, Sie haben gerade einen Schlüsselvertrag von 1.000.000 US -Dollar abgeschlossen und die F5 -Taste versehentlich auf Ihrer Tastatur gedrückt. Oder schlimmer noch, einige böswillige Benutzer fangen Ihre Anfrage ab, stellen fest, dass es sich um eine Zahlung handelt, und wiederholen Sie sie, um Ihre Mittel zu stehlen und sich gegen Sie zu rächen.
Lösung
Um doppelte Postanforderungen zu verhindern, aktualisieren wir das Tag, um ein verstecktes Feld hinzuzufügen, das das Token speichert.
Als nächstes werden wir eine Funktion erstellen, die ein zufälliges Token erzeugt und sie sowohl in die versteckten Felder als auch in die Sitzungssammlung einbettet.
ändern wir die Funktion page_load () so, dass die veröffentlichten Daten nur angezeigt werden, wenn das veröffentlichte Token dem in der Sitzung gespeicherten Token entspricht.
Schließlich werden wir die Funktion onPerender () überschreiben, um ein neues Token zu generieren, bevor die endgültige Ausgabe an den Client gesendet wird. Dies macht es zu einem einmaligen Token, da es jedes Mal aktualisiert wird, wenn eine neue Anfrage gesendet wird.
Wenn Sie nun auf die Schaltfläche klicken, um das Formular einzureichen, funktioniert es genauso wie zuvor. Wenn Sie jedoch versuchen, einen Wiederholungsangriff zu simulieren, indem Sie die Seite aktualisieren, erhalten Sie den folgenden Fehler, da das mit dem Formular gesendete Token nicht mehr dem auf dem Server gespeicherten Token ist:
Auf diese Weise können wir zwischen gültigen Schaltflächenklick-Einsendungen und fehlerfreien Anforderungen unterscheiden.
Code
verbessernObwohl dieser Code das Wiederholungsangriff der Seite löst, hat er immer noch einige Probleme, die gelöst werden müssen:
Als begeisterter objektorientierter Programmierbegeisterter habe ich nach Möglichkeiten gesucht, die Kraft dieses besten Programmierparadigmas zu nutzen, um den Code zu überarbeiten und zu verbessern.
Um das obige Problem zu lösen, müssen wir als erstes eine Klasse definieren, die die Funktion der Token -Generierung zusammenfasst. Wir nennen die Klassen -tokenizedPage und leiten sie von System.web.ui.page ab, damit wir sie in Zukunft für Seiten verwenden können.
Als nächstes, um den Code leichter zu lesen und zu verwalten, verkapulieren wir das Seiten -Token und das Sitzungs -Token in zwei verschiedene Eigenschaften, die der Tokenized -Page -Klasse hinzugefügt wurden. Um den Code auf Webseiten einfach zu portieren, verwenden wir die Ansichtsstate -Sammlung, anstatt das Eingabefeld zu verbergen, um das Seiten -Token zu speichern. Wir verwenden auch die Eigenschaft von Page.titel als Schlüssel zum Speichern des Tokens in der Sitzung. Dies verbessert unseren Code und löst das zweite Problem teilweise, das die Nutzung unserer Website auf eine einzelne Registerkarte des Browsers beschränkt. Durch die Anwendung dieser Änderung können wir verschiedene Seiten der Website auf verschiedenen Registerkarten öffnen, aber wir können nicht mehrere Instanzen derselben Seite auf separaten Registerkarten öffnen, da sie das Token weitergeben. Dieses Problem wird später gelöst.
Als nächstes fügen wir eine schreibgeschützte Boolesche Eigenschaft namens istokenValid hinzu, die Beispielen für andere Seiteneigenschaften wie IsPostback und Isvalid folgt. Der Zweck dieser Eigenschaft besteht darin, sicherzustellen, dass das Seiten -Token dem Sitzungs -Token entspricht.
Schließlich fügen wir die Überschreibung der Funktion von generaterandomToken () und zum Onprerender () -Event hinzu, genau wie in der Testumgebung.
Um den einmaligen Token-Modus zu verwenden, müssen wir nur eine neue Seite erstellen, sie von der TokenizedPage ableiten und iTokenValid verwenden, wenn ein einmaliges Token benötigt wird.
Es ist viel besser.
machen es besser
Ein Problem mit diesem Code ist, dass, wenn Sie zwei Registerkarten in Ihrem Browser haben, die auf dieselbe Seite zeigen, eine Registerkarte veröffentlichen, die die Token der anderen Registerkarte ungültig machen, da sie denselben Sitzungs -Token -Schlüssel verwenden. Dies kann durch Hinzufügen der Token-ID gelöst werden, mit der sichergestellt wird, dass jede Anfrage-Wirkungs-Sequenz, die auf einer Registerkarte auftritt, einen eigenen Satz einzigartiger Token verwendet und andere Anforderungen auf derselben Seite nicht beeinträchtigt. Das erste, was zu tun ist, ist die tokenisierte Klasse -Klasse zurückzugeben und die Tokenid -Eigenschaft hinzuzufügen. Diese Eigenschaft generiert eine zufällige ID, wenn sie erstmals in der ersten GET -Anforderung aufgerufen wird und in der Ansichtserfassung für zukünftige Wiederverwendung gespeichert wird.
Als nächstes ändern wir die SessionHidDentoken -Eigenschaft, um die Eigenschaft zum Tokenid zu verwenden, anstatt die Eigenschaft von Seite zu verwenden.
Das Wunderbare ist, dass wir keine anderen Änderungen vornehmen müssen, da wir die Abstraktions- und Kapselungsprinzipien verwenden (noch einmal für die Vorteile von OOP) TokenizedPage.
verbleibende Fragen
Dies ist, was es um den einmaligen Token-Modus geht. Es sind noch zwei Fragen übrig:
Haben Sie Verbesserungen hinzufügen oder möchten ihre Implementierung in anderen Plattformen und Programmiersprachen teilen? Bitte hinterlassen Sie eine Nachricht im Kommentarbereich unten.
FAQ zur Verhinderung der Website -Replay -Angriffe (FAQ)
Wiederholungsangriff ist eine Form des Cyberangriffs, bei der die effektive Datenübertragung böswillig oder betrügerisch wiederholt oder verzögert wird. Ein Angreifer tut dies, indem er die Daten abfasst und erneut übernimmt, was Teil eines Maskeradierungsangriffs durch IP -Paketersatz sein kann. Dies stellt eine ernsthafte Bedrohung für die Sicherheit von Kommunikation und Daten dar.
Die Erkennung von Wiederholungsangriffen
kann eine Herausforderung sein, da die übertragenen Daten gültig und ursprünglich von einem autorisierten Benutzer gesendet werden. Es gibt jedoch einige Anzeichen dafür, dass Wiederholungsangriffe angezeigt werden können. Dazu gehören die Verzögerung der doppelten Übertragung oder der Datenübertragung. Darüber hinaus kann die Implementierung von Sicherheitsmaßnahmen wie Zeitstempel und Seriennummern dazu beitragen, Wiederholungsangriffe zu erkennen.Die Folgen eines Wiederholungsangriffs können je nach Art der abgefangenen Daten schwerwiegend sein. Dies kann zu unbefugtem Zugriff auf vertrauliche Informationen, betrügerische Transaktionen und sogar Verstöße gegen Sicherheitssysteme führen. Dies kann zu finanziellen Verlusten, Reputationsschäden und potenziellen rechtlichen Auswirkungen führen.
Es gibt mehrere Strategien, um Wiederholungsangriffe zu verhindern. Dazu gehören die Verwendung sicherer Kommunikationsprotokolle (wie SSL oder TLS), die Implementierung von Zeitstempeln oder Seriennummern und die Verwendung von einmaligen Kennwörtern oder Zufallsnummern. Darüber hinaus kann die regelmäßige Überwachung und Prüfung Ihres Netzwerkverkehrs dazu beitragen, Wiederholungsangriffe zu erkennen und zu verhindern.
Zufallszahl ist eine zufällige oder pseudo-randomische Zahl, die nur einmal in einer Kommunikationssitzung verwendet wird. Es verhindert die Wiedergabestattungen, indem sichergestellt wird, dass jede Datenübertragung eindeutig ist, auch wenn dieselben Daten mehrmals gesendet werden. Dies verhindert, dass der Angreifer die Datenübertragung erfolgreich wiederholt.
SSL (Secure Sockets Layer) und TLS (Transport Layer Security) sind Verschlüsselungsprotokolle, die eine sichere Kommunikation mit Netzwerk bieten. Sie verhindern Wiederholungsangriffe, indem sie die übertragenen Daten verschlüsseln und eine Kombination aus Sequenznummern und Zeitstempeln verwenden, um die Einzigartigkeit jeder Datenübertragung sicherzustellen.
Zeitstempel können eine Schlüsselrolle bei der Verhinderung von Wiederholungsangriffen spielen. Durch Hinzufügen eines Zeitstempels zu jeder Datenübertragung können Sie sicherstellen, dass jede Übertragung eindeutig ist und nicht erfolgreich abgespielt werden kann. Wenn eine Wiedergabetriebe festgestellt wird, kann sie auf der Grundlage des Zeitstempels leicht identifiziert und verworfen werden.
Ja, Wiederholungsangriffe können auf einer Website ohne ordnungsgemäße Sicherheitsmaßnahmen durchgeführt werden. Websites, die sensible Informationen wie Finanzdaten oder persönliche Informationen übertragen, sind jedoch besonders anfällig für Angriffe.
Obwohl nicht so häufig wie einige andere Arten von Cyberangriffen, treten Wiederholungsangriffe auf und können schwerwiegende Konsequenzen haben. Daher ist es sehr wichtig, Maßnahmen zu ergreifen, um sie zu verhindern.
Einige Best Practices, um Wiederholungsangriffe zu verhindern, umfassen die Verwendung sicherer Kommunikationsprotokolle, die Durchsetzung von Zeitstempeln oder Seriennummern, die Verwendung von Einmalkennwörtern oder Zufallsnummern sowie die periodische Überwachung und Prüfung Ihres Netzwerkverkehrs. Darüber hinaus kann die Aufklärung Ihrer Benutzer über die Bedeutung der Sicherheit und die Ermutigung von sicheren Kennwörtern dazu beitragen, Wiederholungsangriffe zu verhindern.
Diese überarbeitete Ausgabe behält die ursprüngliche Bedeutung bei der Verwendung unterschiedlicher Formulierungen und Satzstrukturen.
Das obige ist der detaillierte Inhalt vonSo verhindern Sie Wiederholungsangriffe auf Ihrer Website. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!