1

Ich lerne über den Schutz einer Website vor unbefugtem Zugriff und ich bin auf Anti-Fälschung gestoßen. Hier ist mein Gedanke (und mein Problem, das ich damit habe). Bitte korrigieren Sie mich, wenn ich falsch liege.Anti Forgery - besser zu verstehen, wie es funktioniert

Fälschungssicherheit wird in den ASP.NET MVC-Anwendungen behandelt (es gibt viele andere Möglichkeiten, aber diese ist ziemlich häufig), indem @Html.AntiForgeryToken() in die Form, die auf einer Webseite vorhanden ist, eingefügt wird.

Dieses Token danach verwendet wird, wenn Benutzer versucht, die Daten an das System zu POST, wo, wenn wir unsere IActionResult oder JsonResult Methode mit [ValidateAntiForgeryToken] Attribut schmücken, überprüft er, ob die Taste, um das erwartete Ergebnis übereinstimmt. Hier ist ein Beispiel dafür, was ich durch Dekoration bedeuten:

[Route("")] 
    [HttpPost("")] 
    [ValidateAntiForgeryToken] 
    public JsonResult UpdateRecords([FromBody]CustomRequest request) 
    { 
     if (ModelState.IsValid) 
     { 
      //...do some logic here 
     } 
    } 

Der Grund, warum ein webistes verwenden Fälschungs Schlüssel sind, so dass wir nicht die unbefugte Zugriff auf unser Geschäft zulassen möchten Objekte wie Datenbanken. Das Problem ist, dass Hacker, wenn eine Website eine Cookie-Authentifizierung verwendet, die in einem lokalen Cache gespeichert ist, diesen gespeicherten Wert einfach abrufen und verwenden können, wenn sie die Daten auf unserer Website veröffentlichen. Aus diesem Grund implementieren wir eine weitere Schutzebene, indem wir einen speziellen (eindeutigen) Schlüssel in eine Webseite einfügen, der beim Posten der Daten geprüft wird. Wenn der Schlüssel nicht übereinstimmt, schlägt der gesamte Buchungsvorgang fehl.

Hier ist das, was ich nicht verstehe. Lassen Sie uns sagen, dass wir unsere Anti Fälschung auf super einfaches Formular auf unserer Webseite wie diese umgesetzt haben:

<form method="post" ng-submit="addItem()" id="main-form"> 
     @Html.AntiForgeryToken() 
     <input placeholder="Add New Item" ng-model="newItem" id="new-item" /> 
    </form> 

ich es tut nichts weiß, aber lassen Sie uns vorstellen, dass durch Klicken auf die input Schaltfläche Benutzer versucht, einige Daten in die Datenbank zu schreiben . Wenn wir die Homepage zu überprüfen, werden wir plötzlich sehen, dass das ist, was die HTML-Code erzeugt würde wie folgt aussehen:

<form class="ng-pristine ng-valid" method="post" ng-submit="addItem()" id="main-form"> 
     <input name="__RequestVerificationToken" value="CfDJ8Ig8dRjRrw9FjKYv6kYaxVu7APOddjpVxQ3ZxGaamjVzV03eQEG7tgRe5q2uXJkKkbUf4RqzRCtJ1DGMK5C-ymroTBe_J9XQ-...(more text here)" type="hidden"> 
     <input class="ng-pristine ng-valid ng-touched" placeholder="Add New Item" ng-model="newItem" id="new-item"> 
    </form> 

Hier, was ich (und potenzieller Hacker) sehen kann, ist der spezielle Anti-Fälschung Schlüssel wir haben gerade darüber gesprochen. Wie kommt es, dass dieser Schlüssel für jeden sichtbar ist, der die Website nutzt? Was ich davon verstehe, ist, dass wir unseren Code im Grunde dem Hacker zur Verfügung stellen, und er kann ihn jetzt einfach benutzen, wenn er in die Datenbank schreibt, um sich zu authentifizieren; oder liege ich falsch?

Ich bin im Moment ziemlich verwirrt und daher wäre jede Hilfe/Info oder Empfehlung in dieser Angelegenheit mehr als willkommen.

+0

Ich empfehle Ihnen, den Wert von '__RequestVerificationToken' zu prüfen und mit den Cookies zu vergleichen. Sie sollten das Formular mehrmals posten und sicherstellen, dass der Wert des ausgeblendeten Eingabefeldes "__RequestVerificationToken" ** eindeutig ** ist.Es bedeutet, dass wenn Sie die Daten über HTTP POST und jemand den Datenverkehr sieht, er immer noch nicht in der Lage ist, seine eigene Anfrage zu stellen, weil AntiForgeryToken in diesem Fall fehlschlägt. Sehen Sie [hier] (http://www.asp.net/web-api/overview/security/preventing-cross-site-request-forgery-csrf-attacks) zum Beispiel. – Oleg

+0

'AntiForgeryToken()' hat nichts mit Autorisierung zu tun. Es dient zur Verhinderung von Cross-Site-Request-Forgery-Angriffen (CSRF). Verweisen [diesen Artikel] (http://www.devcurry.com/2013/01/what-is-antiforgerytoken-and-why-do-i.html) und [dieses] (http://stackoverflow.com/ Fragen/38555299/Anti-Fälschung-besser-Verständnis-wie-es-Werke) zu verstehen, was es ist –

Antwort

0

Der Token ist da, um zu verhindern, dass Benutzer Formularanforderungen fälschen. Es wird auch jedes Mal neu generiert, wenn es erforderlich ist - zumindest pro Benutzer und wahrscheinlich pro Anfrage (ich bin mir nicht sicher, in diesem letzten Punkt). Dies bedeutet, dass der Angreifer nicht einfach sein eigenes Token kopieren oder erstellen kann; Sie müssten es von der Seite des Benutzers nehmen, und wenn sie das tun können, dann haben sie wahrscheinlich genug Informationen, um das Token trotzdem zu umgehen.

Ein Angreifer könnte erstellen Sie ein Formular auf einer anderen Website mit einigen Werten und zeigen Sie es auf einer Seite auf Ihrer Website. Wenn der Administrator dieses Formular (z. B. durch JavaScript) abschickt, hat er diese Aktion effektiv mit seinen Berechtigungen und den vom Angreifer angegebenen Werten ausgeführt. Das ist schlecht, mit genügend Wissen können Sie jemanden dazu bringen, einen Account zu löschen, etwas Obszönes zu veröffentlichen, etc.