2016-07-21 48 views
1

Ich lerne jetzt ein Konzept der ASP.NET-Core-Entwicklung und während meines Lernens habe ich aus dem folgenden article herausgelesen, dass eine Webseite vor unbefugtem Zugriff geschützt werden muss, um prever aus Cross Site Request Fälschungsangriffe.Schutz vor Cross-Site-Request-Forgery-Attacken

Ich habe einige Tutorials gefolgt und für meine eigene (Lernen) Anwendung ich habe:

  • Implementiert die [Authorize] Dekorateur auf der Spitze meines Controller (in meinem Fall war es API-Controller)
  • In der Aktuelle POST, UPDATE Methoden, die ich implementiert habe if (ModelState.IsValid) Anruf zu überprüfen, wenn Parameter übergeben wurden
  • ViewModels anstelle von tatsächlichen verwendet Modelle, die in einer Datenbank bei der Kommunikation mit einer Website (oder API in diesem Fall) verwendet werden.

Ich habe die folgenden drei Fragen:

1) Ist dieser Ansatz ausreichend, um meine Website zu schützen? Als Authentifizierungsmethode verwende ich einfach CookieAuthentification. Oder mit anderen Worten: (Da dies eine zu breite Frage sein könnte), ist dieser Ansatz auf einem richtigen Weg, mögliche Angreifer zu entmutigen?

2) In meinem aktuellen Setup (mit ViewModels anstelle von realen Modellen) ist [ValidateAntiForgeryToken] notwendig? Wenn ja, welchem ​​Zweck dient es?

3) Die Frage (die mich am meisten interessiert) betrifft ViewModels. Wie kann ViewModels meine Website vor unbefugten Angriffen schützen? Ich verstehe, dass ich in meinem ViewModel nur Variablen/Eigenschaften offenlegen kann, auf die der Benutzer Zugriff haben soll (und den Rest ausblenden), aber wie kann er meine Website schützen, wenn ich noch meine ID (Primärschlüssel) offen legen muss (wie ohne ID kann ich mir nicht vorstellen wie man zB DELETE/UPDATE Anrufe machen würde)

Jede Hilfe in dieser Angelegenheit wäre mehr als geschätzt, da ich immer noch dieses Thema lerne.

Antwort

1

Website-Sicherheit ist ein komplexes Problem. Es sollten Schutzmaßnahmen implementiert werden, die der Sensibilität schutzbedürftiger Daten entsprechen.

1) Eine gewisse Authentifizierungsstufe ist erforderlich, um vor einem anonymen Angriff zu schützen, bei dem ein Angreifer unendlich viele Versuche haben muss, einen erfolgreichen Angriff zu erhalten.

2) [ValidateAntiForgeryToken] ist für jede Datenänderung erforderlich. Ohne sie könnten Sie einen Benutzer haben, der erfolgreich authentifiziert wurde und einen gültigen Cookie erhalten hat, der dann von einem böswilligen Akteur gestohlen wird, der den von Ihrem gültigen Benutzer verwendeten Browser kompromittiert hat, und diesen gestohlenen Cookie verwendet, um unerwünschte Datenänderungen vorzunehmen.

3) Die Verwendung von ViewModels bedeutet, dass Sie keine direkten Datenaufrufe an die Datenbank ausgegeben haben. Ja, ein böswilliger Akteur könnte Daten in unerwünschter Weise verändern, ist aber immer noch auf Änderungen innerhalb des Bereichs Ihrer Datenschicht beschränkt. Ohne ViewModels könnte es für einen Angreifer möglich sein, Änderungen vorzunehmen, die Sie nie mit SQL Injection beabsichtigt haben. Wenn Sie ein ORM wie Entity Framework verwenden, ist die Wahrscheinlichkeit einer SQL Injection weniger wahrscheinlich.