|
|
| Zeile 1: |
Zeile 1: |
| = Einführung in Controller = | | ==Schwachstellen== |
| Ein Controller ist eine Klasse, die verwendet wird, um eine Reihe von Aktionen (oder Aktionsmethoden) zu gruppieren.
| | ===Sprachmodell=== |
| Aktionsmethoden führen eine bestimmte Operation aus, wenn eine Anfrage empfangen wird, und geben das Ergebnis (Antwort) zurück.
| | * [https://airiskdatabase.com AI Risk Database] – Eine Datenbank mit Risiken und Schwachstellen im Bereich Künstliche Intelligenz. |
| | | * [https://github.com/advisories GitHub CVE & Security Advisories] – Offizielle Sicherheitswarnungen und CVE-Meldungen von GitHub für Open-Source-Projekte. |
| == Controller erstellen == | | * [https://cve.mitre.org/ MITRE CVE Database] – Zentrale Datenbank für öffentlich bekannte Schwachstellen (Common Vulnerabilities and Exposures, CVE). |
| Controller sollten eines oder beides erfüllen:
| | * [https://nvd.nist.gov/ National Vulnerability Database (NVD)] – Die US-amerikanische nationale Datenbank für Schwachstellen, gepflegt vom NIST. |
| | | * [https://www.cvedetails.com/ CVE Details] – Eine benutzerfreundliche Übersicht und Analyse von CVE-Einträgen. |
| Der Klassenname sollte mit "Controller" enden. Bsp: <code>HomeController</code>
| | * [https://www.exploit-db.com/ Exploit Database] – Sammlung von Exploits und Proof-of-Concept-Code für bekannte Schwachstellen. |
| Das <code>[Controller]</code>-Attribut wird auf die Klasse selbst oder auf ihre Basisklasse angewendet.
| | * [https://www.securityfocus.com/vulnerabilities SecurityFocus Vulnerability Database] – Archiv von Schwachstellen und Sicherheitsmeldungen. |
| <source lang="csharp">
| | * [https://www.openwall.com/lists/oss-security/ Open Source Security (oss-security)] – Mailingliste und Archiv zu Schwachstellen in Open-Source-Software. |
| [Controller] | | * [https://vuldb.com VulDB] – Community-basierte Schwachstellendatenbank mit aktuellen Informationen und Analysen. |
| class KlassenNameController
| | * [https://www.zerodayinitiative.com/advisories/published/ Zero Day Initiative Advisories] – Veröffentlichte Schwachstellen und Exploits aus dem Zero Day Initiative Programm. |
| {
| |
| // Aktionsmethoden hier
| |
| }
| |
| </source>
| |
| | |
| '''Optional:'''
| |
| | |
| Ist eine öffentliche (<code>public</code>) Klasse.
| |
| Erbt von <code>Microsoft.AspNetCore.Mvc.Controller</code>.
| |
| == 'Routing' in Controllern aktivieren ==
| |
| '''AddControllers( )'''
| |
| | |
| <source lang="csharp">
| |
| builder.Services.AddControllers();
| |
| </source>
| |
| Fügt alle Controller als Dienste zur <code>IServiceCollection</code> hinzu.
| |
| So kann auf sie zugegriffen werden, wenn ein bestimmter Endpunkt sie benötigt.
| |
| | |
| '''MapControllers()'''
| |
| | |
| <source lang="csharp">
| |
| app.MapControllers();
| |
| </source>
| |
| Fügt alle Aktionsmethoden als Endpunkte hinzu.
| |
| Dadurch entfällt die Notwendigkeit, die <code>UseEndPoints()</code>-Methode zu verwenden, um Aktionsmethoden als Endpunkte hinzuzufügen.
| |
| | |
| == Verantwortlichkeiten von Controllern ==
| |
| | |
| '''Anfragen lesen''' ** Extrahieren von Datenwerten aus der Anfrage, wie z.B. Query-String-Parameter, Anfragekörper (Request Body), Anfrage-Cookies, Anfrage-Header usw.
| |
| '''Modelle aufrufen''' ** Aufrufen von Geschäftslogik-Methoden. Geschäftsoperationen sind in der Regel als 'Dienste' (Services) verfügbar.
| |
| '''Validierung''' ** Validieren eingehender Anfragedetails (Query-String-Parameter, Anfragekörper, Anfrage-Cookies, Anfrage-Header usw.)
| |
| '''Antwort vorbereiten''' ** Auswählen, welche Art von Antwort an den Client gesendet werden soll, und Vorbereiten der Antwort (Aktionsergebnis).
| |
| === ContentResult ===
| |
| Ein <code>ContentResult</code> kann jeden Antworttyp repräsentieren, basierend auf dem angegebenen MIME-Typ.
| |
| Der MIME-Typ repräsentiert den Typ des Inhalts, wie z.B. <code>text/plain</code>, <code>text/html</code>, <code>application/json</code>, <code>application/xml</code>, <code>application/pdf</code> usw.
| |
| | |
| <source lang="csharp">
| |
| return new ContentResult() { Content = "Inhalt", ContentType = "Inhaltstyp" };
| |
| // [oder] | |
| return Content("Inhalt", "Inhaltstyp");
| |
| </source>
| |
| | |
| === JsonResult ===
| |
| Ein <code>JsonResult</code> kann ein Objekt im JavaScript Object Notation (JSON)-Format repräsentieren.
| |
| Bsp: <code>{ "firstName": "James", "lastName": "Smith", "age": 25 }</code>
| |
| | |
| <source lang="csharp">
| |
| return new JsonResult(ihr_objekt);
| |
| // [oder]
| |
| return Json(ihr_objekt);
| |
| </source>
| |
| | |
| == Dateiergebnisse (File Results) ==
| |
| Ein Dateiergebnis sendet den Inhalt einer Datei als Antwort.
| |
| Bsp: PDF-Datei, TXT-Datei, EXE-Datei, ZIP-Datei usw.
| |
| | |
| === VirtualFileResult ===
| |
| | |
| <source lang="csharp">
| |
| return new VirtualFileResult("relativer/dateipfad", "inhaltstyp");
| |
| //oder
| |
| return File("relativer/dateipfad", "inhaltstyp");
| |
| </source>
| |
| Repräsentiert eine Datei innerhalb des WebRoot-Ordners (standardmäßig 'wwwroot').
| |
| Wird verwendet, wenn sich die Datei im WebRoot-Ordner befindet.
| |
| | |
| === PhysicalFileResult ===
| |
| Repräsentiert eine Datei, die nicht notwendigerweise Teil des Projektordners ist.
| |
| Wird verwendet, wenn sich die Datei außerhalb des WebRoot-Ordners befindet.
| |
| | |
| <source lang="csharp">
| |
| return new PhysicalFileResult("absoluter/dateipfad", "inhaltstyp");
| |
| //oder
| |
| return PhysicalFile("absoluter/dateipfad", "inhaltstyp");
| |
| </source>
| |
| | |
| === FileContentResult ===
| |
| Repräsentiert eine Datei aus einem <code>byte[]</code>.
| |
| Wird verwendet, wenn ein Teil der Datei oder ein <code>byte[]</code> aus einer anderen Datenquelle als Antwort gesendet werden muss.
| |
| | |
| <source lang="csharp">
| |
| return new FileContentResult(byte_array, "inhaltstyp");
| |
| //oder
| |
| return File(byte_array, "inhaltstyp");
| |
| </source>
| |
| | |
| == IActionResult ==
| |
| Es ist die übergeordnete Schnittstelle (Interface) für alle Aktionsergebnis-Klassen wie <code>ContentResult</code>, <code>JsonResult</code>, <code>RedirectResult</code>, <code>StatusCodeResult</code>, <code>ViewResult</code> usw.
| |
| Indem der Rückgabetyp als <code>IActionResult</code> angegeben wird, können Sie jeden der Untertypen von <code>IActionResult</code> zurückgeben.
| |
| | |
| == Statuscode-Ergebnisse (Status Code Results) ==
| |
| Ein Statuscode-Ergebnis sendet eine leere Antwort mit dem angegebenen Statuscode.
| |
| Bsp: 200, 400, 401, 404, 500 usw.
| |
| | |
| === StatusCodeResult ===
| |
| Repräsentiert eine Antwort mit dem angegebenen Statuscode.
| |
| Wird verwendet, wenn Sie einen bestimmten HTTP-Statuscode als Antwort senden möchten.
| |
| | |
| <source lang="csharp">
| |
| return new StatusCodeResult(status_code);
| |
| //oder | |
| return StatusCode(status_code);
| |
| </source>
| |
| | |
| === UnauthorizedResult ===
| |
| Repräsentiert eine Antwort mit dem HTTP-Statuscode '401 Unauthorized'.
| |
| Wird verwendet, wenn der Benutzer nicht autorisiert (nicht angemeldet) ist.
| |
| | |
| <source lang="csharp">
| |
| return new UnauthorizedResult();
| |
| //oder | |
| return Unauthorized();
| |
| </source>
| |
| | |
| === BadRequestResult ===
| |
| Repräsentiert eine Antwort mit dem HTTP-Statuscode '400 Bad Request'.
| |
| Wird verwendet, wenn die Anfragewerte ungültig sind (Validierungsfehler).
| |
| | |
| <source lang="csharp">
| |
| return new BadRequestResult();
| |
| //oder | |
| return BadRequest();
| |
| </source>
| |
| | |
| === NotFoundResult ===
| |
| Repräsentiert eine Antwort mit dem HTTP-Statuscode '404 Not Found'.
| |
| Wird verwendet, wenn die angeforderten Informationen auf dem Server nicht verfügbar sind.
| |
| | |
| <source lang="csharp">
| |
| return new NotFoundResult();
| |
| //oder | |
| return NotFound();
| |
| </source>
| |
| | |
| == Umleitungsergebnisse (Redirect Results) ==
| |
| Ein Umleitungsergebnis sendet entweder eine HTTP 302- oder 301-Antwort an den Browser, um auf eine bestimmte Aktion oder URL umzuleiten.
| |
| Bsp: Umleitung von 'action1' zu 'action2'.
| |
| | |
| === RedirectToActionResult ===
| |
| Repräsentiert eine Antwort zur Umleitung von der aktuellen Aktionsmethode zu einer anderen Aktionsmethode, basierend auf dem Aktionsnamen und dem Controllernamen.
| |
| | |
| '''302 - Found'''
| |
| | |
| <source lang="csharp">
| |
| return new RedirectToActionResult("action", "controller", new { route_values });
| |
| //oder | |
| return RedirectToAction("action", "controller", new { route_values });
| |
| </source>
| |
| | |
| '''301 - Moved Permanently'''
| |
| | |
| <source lang="csharp">
| |
| return new RedirectToActionResult("action", "controller", new { route_values }, true);
| |
| //oder
| |
| return RedirectToActionPermanent("action", "controller", new { route_values });
| |
| </source>
| |
| | |
| === LocalRedirectResult ===
| |
| Repräsentiert eine Antwort zur Umleitung von der aktuellen Aktionsmethode zu einer anderen lokalen URL.
| |
| | |
| '''302 - Found'''
| |
| | |
| <source lang="csharp">
| |
| return new LocalRedirectResult("url");
| |
| //oder | |
| return LocalRedirect("url");
| |
| </source>
| |
| | |
| '''301 - Moved Permanently'''
| |
| | |
| <source lang="csharp">
| |
| return new LocalRedirectResult("url", true);
| |
| //oder
| |
| return LocalRedirectPermanent("url");
| |
| </source>
| |
| | |
| === RedirectResult ===
| |
| Repräsentiert eine Antwort zur Umleitung von der aktuellen Aktionsmethode zu einer beliebigen anderen URL (entweder innerhalb derselben Webanwendung oder einer anderen Webanwendung).
| |
| | |
| '''302 - Found'''
| |
| | |
| <source lang="csharp">
| |
| return new RedirectResult("url");
| |
| //oder
| |
| return Redirect("url");
| |
| </source>
| |
| | |
| '''301 - Moved Permanently'''
| |
| | |
| <source lang="csharp">
| |
| return new RedirectResult("url", true);
| |
| //oder
| |
| return RedirectPermanent("url");
| |
| </source>
| |