Diese Frage ist mehr eine Rückversicherung als eine direkt über wie zu codieren. Als Autodidakt hatte ich nicht viele Möglichkeiten, Profis solche Dinge zu fragen, also versuche ich es hier.In welchem Fall kann eine CSRF-Befreiung gefährlich sein?
Ich habe die Dokumente in dem django-docs (https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/) und einige Informationen auf dieser Seite zu lesen: http://cwe.mitre.org/top25/#CWE-352
Soweit ich verstanden habe, django ein Token (eine Art von Pin-Code) ein liefert Benutzer. Und um zu bestätigen, dass es wirklich er ist, muss er es zurückgeben, wenn er das nächste Mal eine Anfrage macht. Und einige Leute bei Google haben herausgefunden, dass dies sogar mit Ajax-Anfragen möglich ist, weshalb wir seit 1.2.6 auch die neue Richtlinie haben, sie zu schützen. Und bei CSRF geht es darum, dass jemand mir etwas gibt (schlechter, gefährlicher Code, korrupte Dateien oder so ähnlich) und vorgibt, jemand anderes zu sein.
Also, wenn ich habe einige Code wie folgt aus:
@csrf_exempt
def grab(request):
"""
view to download an item
POST because it stores that a user has downloaded this item
"""
item_id = request.POST.get('item', None)
if not loop: return HttpResponseBadRequest('no item id provided')
item = Item.objects.get(pk=int(item_id))
, die sparen sollte, wie ich keinen Zugriff auf die Datenbank oder einen Teil meiner Anwendung geben werde, bevor Sie den angegebenen Wert in eine umwandeln ganze Zahl. Und es gibt nicht zu viel Schaden, wenn ich eine falsche Aufzeichnung von jemandem mache, der eine Datei herunterlädt (in diesem Fall ist es fast keine). Angenommen, ich würde Rechnungen schreiben, die sich auf diese Sichtweise stützen, wäre die CSRF-Befreiung eine sehr schlechte Idee (Ist das richtig?).
Ich verstehe auch nicht, warum jemand das CSRF-Token von einem Benutzer nicht stehlen kann und es immer noch dazu benutzt, mich (oder den Benutzer) auszutricksen. Also habe ich ein paar Fragen zu diesem Thema:
1) sind meine Annahmen von oben rechts?
2) kann mir jemand sagen, was (und wahrscheinlich wie) ein nicht so netter Kerl könnte die obige Ansicht benutzen, um schmutzige Tricks zu machen, und was wären sie?
3) ist ein CSRF ein Beispiel für einen Man-in-the-Middle-Angriff, ist es nur damit verwandt oder ist es etwas ganz anderes?
4) Gibt es wertvolle Links, um weitere Informationen zu solchen Gefahren zu erhalten?
Vielleicht klingen einige dieser Fragen nicht allzu gut informiert, aber ich versuche, darüber hinweg zu kommen. Ich wäre sehr froh, wenn mir jemand helfen könnte.
Es gibt ein schwaches Licht am Ende des Tunnels ... Also wenn ich böse Dinge an einen Server senden wollte, müsste ich zuerst einige Daten an einige Benutzer Browser senden. In diesen Daten verbirg ich ein automatisches Buchungsformular, das an den Server sendet, um angegriffen zu werden. Ich nehme an, dass der Benutzer bei diesem Server angemeldet ist, da er dort einen Account hat. Und wenn der Server nicht nach einem Token suchen würde, müsste er einfach glauben, dass die Anfrage legitim war. Zumindest habe ich jetzt eine Idee, wie es funktioniert und wo die Grenze zu MIM und XSS gezogen werden kann. Dank dafür. – marue
@marue Bei CSRF geht es nicht darum, schädliche Daten an den Server zu senden. Es geht in erster Linie um Identitätswechsel, da die angreifende Site legitime und authentische Anfragen im Namen des Opfers senden kann. Lauschangriffe, MITM und XSS sind nur Mittel, um einen mildernden CSRF-Token zu erfassen (obwohl die meisten Authentifizierungsverwaltungsschemata Cookies-basierte Sitzungen verwenden, können Sie stattdessen auch die Sitzungs-ID abrufen). – Gumbo
Also CSRF ist alles und "nur" vorgibt, jemand zu sein, der du nicht bist? Wo es nur nicht heißt, nicht wichtig, aber alles andere ist ein anderer Angriffsvektor. – marue