Frage

Ich frage mich, ob die folgende Methode wird vollständig Prevent CSRF und mit allen Benutzern kompatibel sein.

Hier ist sie:

In der Form ist nur einen zusätzlichen Parameter, der: encrypted(user's userID + request time). Server-Seite nur entschlüsseln und stellen Sie sicher, es ist die richtige Benutzer-ID und die Anforderungszeit war recht neu.

Neben jemand den Verkehr des Benutzers Schnüffeln oder Brechen der Verschlüsselung wird diese vollständig sicher? Gibt es irgendwelche Nachteile?

War es hilfreich?

Lösung

Während Ihr Ansatz sicher ist, ist es nicht Standard. Der üblicher Weg CSRF-Angriffe zu verhindern, ist Pseudo-Zufallszahl zu erzeugen, dass Sie in einem versteckten Bereich gehören und auch in einem Cookie und dann auf der Serverseite überprüfen Sie, dass beiden Werte übereinstimmen. Werfen Sie einen Blick auf diese Post .

Andere Tipps

Ein großer Nachteil ist, dass Ihre Seite wird ‚Timeout‘, wenn der Benutzer verlässt ihren Browser geöffnet länger als der Zeitrahmen Sie sich entscheiden, ist sinnvoll, bevor sie das Formular veröffentlichen. Ich ziehe Websites nicht ihre Benutzer zu eilen in ihre Handlung zu begehen, wenn die Aktion von Natur aus zeitempfindlich ist.

Es ist nicht ganz sicher, wie es möglich sein kann, eine angreifende Seite den Benutzer-ID zu erraten.
Wenn Sie einen Sitzungs-Verschlüsselungsschlüssel verwenden, ist es sicher. (Aber dann müssen Sie tun, um die rohen Schlüssel zu senden, und es ist bereits sicher)

Beachten Sie auch, über Zeitzonen und ungenaue Uhren.

Es sollte funktionieren, ja. Obwohl ich Sie würde vorschlagen, eine Zufallszahl für Benutzer-ID verwenden, wenn Sie neue Benutzer erstellen, anstatt eine einfache fortlaufende Nummer (natürlich, stellen Sie sicher, es ist einzigartig, wenn Sie den Benutzer zu erstellen). Auf diese Weise ist es schwer für einen Angreifer zu „erraten“.

, um den Benutzer-ID und einen Datetime zu haben, ist ein Anfang, aber Sie wollen auch einen Pseudo-Zufallszahlenwert vorzugsweise mit hohen Entropie zusätzlich im Kanarienvogel-Token. Grundsätzlich müssen Sie die Vorhersagbarkeit des Tokens auf einer Seite in einem bestimmten Kontext zu reduzieren. nur den Benutzer-ID und einen Datetime Mit könnte theoretisch möglich sein, nach einiger Zeit zu brechen, da es nicht „zufällig genug“ ist. CSRF-Attacken im Allgemeinen scripted Having said that, und nicht direkt überwacht, so in Abhängigkeit von der Belichtung Ihrer Anwendung kann es ausreichend sein.

Auch sicher sein, um einen sichereren Verschlüsselungsalgorithmus zu verwenden, wie zum Beispiel Rijndael / AES mit ein Schlüssel von Bits, die für die Sicherheit Ihrer Anwendung ausreichend und eine Pseudo-Zufalls Initialisierungsvektor.

Das Sicherheitssystem Sie vorgeschlagen haben, ist anfällig für Angriffe.

Blockchiffren wie AES als sehr sichere Zufallszahlengeneratoren verwendet. Sie werden CSPRNGs . Doch wie jeder Zufallszahlengenerator haben Sie Sorge über das, was Sie den Algorithmus mit Säen. In diesem Fall verwenden Sie user's userID + request time von denen beide kann der Angreifer wissen, Ihre Implementierung keinen Schlüssel oder IV so nehme ich an sie NULL sind. Der Angreifer baut die Anfrage, so dass er immer die request time kennen. Die userId ist wahrscheinlich ein Primärschlüssel, wenn Sie 100 Benutzer haben dann der Angreifer 100 Anfragen schmieden konnte und einer von ihnen arbeiten. Aber die Angreifer wollen einfach nur den Administrator zu zwingen, sein Passwort zu ändern, ist Admin in der Regel einen Primärschlüssel von 1 hat

nicht neu erfinden die Quaddel , sehr gute Zufallszahlengeneratoren sind bereits gebaut worden, und es gibt auch anti-csrf Bibliotheken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top