it-swarm.com.de

Verhindern Sie Cross-Site-Scripting

Eines der Sicherheitsprinzipien ist die Bereinigung von Zeichenfolgen und Variablen, die vom Client an den Server übergeben werden. In plain PHP gibt es einige Funktionen, um XSS-Schwachstellen ( Cross-Site Scripting ) zu verhindern:

Was ist die Strategie Drupal 8 zur Verhinderung von XSS-Angriffen? Wie kann ich Clientdaten veröffentlichen, um meine Site vor XSS-Angriffen zu schützen?

Ich erinnere mich, dass Drupal 7 filter_xss() hat, um XSS-Schwachstellen zu verhindern, aber was ist Drupal 8 Strategie gegen XSS Schwachstellen?

7
Yusef

Desinfektion der Ausgabe, um XSS-Angriffe (Cross Site Scripting) zu vermeiden

Use Twig templates Die Twig Theme Engine entkommt jetzt standardmäßig automatisch allem. Das bedeutet, dass jede Zeichenfolge, die aus einer Twig - Vorlage (z. B. irgendetwas zwischen {{ }}) gedruckt wird, automatisch bereinigt wird wenn keine Filter vorhanden sind verwendet.

Siehe Filter - Ändern von Variablen in Twig Templates für die in Drupal verfügbaren Filter Twig).

Um das automatische Escaping von Twig zu nutzen (und zu vermeiden, dass sicheres Markup maskiert wird), sollte idealerweise sämtliches HTML aus Twig - Vorlagen) ausgegeben werden.

API-Funktionen Verwenden Sie t () und \Drupal::translation()->formatPlural() mit Platzhaltern @ Oder %, Um sichere, übersetzbare Zeichenfolgen zu erstellen. Weitere Informationen finden Sie unter Code-Text-Übersetzungs-API in Drupal 8 .

Mit t (), Html :: Escape (), Xss :: Filter () oder Xss :: FilterAdmin () bereinigte Strings werden automatisch als sicher markiert, ebenso wie Markup-Strings, die aus Render-Arrays über erstellt wurden Renderer .

Es kann zwar auch Text bereinigen, es ist jedoch fast nie korrekt, check_markup in einem Thema oder Modul zu verwenden, außer im Kontext eines Textbereichs mit einem zugehörigen Textformat.

Quelle: Drupal 8: Schreiben von sicherem Code von: Rade, Shyamala, Robert Castelo und Pere Orga.

10
No Sssweat

Zweigvorlagen haben die Ausgabe in meiner Anwendung nicht bereinigt. Eine Skriptzeichenfolge oder ein XSS-Angriff, der in ein Kommentarfeld eingegeben und gespeichert wurde, wurde beim Laden der Seite ausgeführt. Stattdessen habe ich das Problem gelöst, indem ich jedes Zeichenfolgeneingabefeld in hook_ENTITY_TYPE_load Bereinigt habe.

 if(isset($entity->$fieldName)) {  
        $value = $entity->get($fieldName)->value;  
        $value =  htmlspecialchars($value);  
        $entity->set($fieldName, $value);  
 }  
1
Janice Gallant

Drupal verfolgt im Allgemeinen den Ansatz der Filterung nach Ausgabe, nicht nach Eingabe.

Ein Modul, das die Eingabe einer Person als nicht Teil des Feldsystems akzeptiert, muss sie bei der Ausgabe filtern (auch von privilegierten Administratorbenutzern). Die Ausgabe erfolgt normalerweise als Render-Array. Eine einfache Möglichkeit, dies zu tun, besteht darin, die zulässigen Tags beim Rendern zu begrenzen. Ein Beispiel aus Ausgabe eines Termlabels durch das Taxonomiemodul :

use Drupal\Component\Utility\Xss;

...

  public function termTitle(TermInterface $taxonomy_term) {
    return [
      '#markup' => $taxonomy_term->getName(),
      '#allowed_tags' => Xss::getHtmlTagList(),
    ];
  }
0
mlncn