


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:
- Der Client stellt eine GET -Anforderung durch, indem er die URL oder Seite eingreift oder auf einen Link klickt.
- Der Server generiert ein zufälliges Token. Anschließend werden eine Kopie des Tokens in der Sitzung gespeichert und die Kopie des Tokens in das
<input type="hidden">
-Tag der an den Client gesendeten Antwort eingebettet. - Der Client verarbeitet den Inhalt und sendet eine Postanforderung an den Server, wenn der Benutzer auf eine Schaltfläche klickt, die das zufällig generierte Token enthält.
- Der Server empfängt die Anforderung und verarbeitet sie weiterhin nur, wenn das beigefügte Token dem in der Benutzersitzung gespeicherten Token entspricht.
- Der Server macht das Token ungültig und kehrt zu Schritt 2 zurück, in dem er die Antwort mit dem neuen zufälligen Token formuliert.
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:
- Es muss auf allen Seiten wiederholt werden
- Wenn Sie mehrere Registerkarten auf derselben Website haben, funktioniert es nicht, da die Token zwischen Anforderungen freigegeben werden
- Es ist sehr hässlich
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:
- Für jede Sitzung (genauer gesagt, wird die Anzahl der an jede Sitzung gesendeten GET -Anfragen eine unbegrenzte Anzahl von Token -IDs generiert. Dies kann durch die Implementierung eines Stack- oder Cache -Mechanismus gelöst werden, der ältere IDs auflöst, wenn sie eine Menge Grenze überschreiten oder für eine bestimmte Dauer nicht verwendet werden. Ich werde die Implementierung Ihnen überlassen.
- Der Standard -Zufallszahlengenerator ist nicht die sicherste und zuverlässige Quelle der Zufälligkeit, die Sie ihn nennen, und ein versierter Hacker kann möglicherweise Token -Sequenzen vorherzusagen. Wenn Sie jedoch die SSL -Verschlüsselung verwenden, können sie das Token sowieso nicht bekommen.
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)
Was ist ein Wiederholungsangriff und wie funktioniert er?
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.
Wie kann man Wiederholungsangriffe erkannt?
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.Was sind die Folgen des Wiederholungsangriffs?
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.
Wie kann ich verhindern, dass meine Website wiederholt wird?
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.
Was ist eine zufällige Zahl und wie verhindert sie Wiederholungsangriffe?
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.
Wie können Wiederholungsangriffe von SSL oder TLS verhindern?
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.
Welche Rolle spielt der Zeitstempel bei der Verhinderung von Wiederholungsangriffen?
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.
Kann der Wiederholungsangriff auf einer Website durchgeführt 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.
Ist der Wiederholungsangriff üblich?
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.
Was sind einige Best Practices, um Wiederholungsangriffe 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!

Bleiben Sie über die neuesten technischen Trends mit diesen Top -Entwickler -Newsletters informiert! Diese kuratierte Liste bietet für jeden etwas, von KI -Enthusiasten bis hin zu erfahrenen Backend- und Frontend -Entwicklern. Wählen Sie Ihre Favoriten und sparen Sie Zeit, um nach REL zu suchen

Dieses Tutorial führt Sie durch das Erstellen einer serverlosen Bildverarbeitungspipeline mit AWS -Diensten. Wir werden ein Next.JS -Frontend erstellen, der in einem ECS -Fargate -Cluster eingesetzt wird und mit einem API -Gateway, Lambda -Funktionen, S3 -Eimer und DynamoDB interagiert. Th

Dieses Pilotprogramm, eine Zusammenarbeit zwischen CNCF (Cloud Native Computing Foundation), Ampere Computing, Equinix Metal und betätigten, rationalisiert ARM64 CI/CD für CNCF -Github -Projekte. Die Initiative befasst sich mit Sicherheitsbedenken und Leistung


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

SecLists
SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

DVWA
Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

Dreamweaver CS6
Visuelle Webentwicklungstools

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.
