Wie und wann werden filter_xss () und check_plain () verwendet?

11

Es gibt viele Vorlagendateien wie diese views-view-fields--magazine--magazine.tpl.phpauf meiner Website. Wie und wann sollte ich filter_xss () und check_plain () verwenden, um die Sicherheit zu verbessern? Zum Beispiel ist dies der Code:

<div>
    <div class="bf-header bf-article-header"><?php print $fields['title']->content; ?></div>
    <div class="bf-article-body"><?php print $fields['field_magazine_body']->content;?></div>
    <div class="bf-article-image"><?php print $fields['field_magazine_image']->content;?></div>
</div>
<div class="separator article-view-separator"></div>

Wie kann ich diese Funktionen darin anwenden?

M ama D.
quelle
Verwenden filter_xss()Sie diese Option, wenn Sie XSS aus potenziell gefährlichen Inhalten (dh Inhalten eines nicht vertrauenswürdigen Benutzers) filtern möchten und check_plain()wenn Sie HTML-Sonderzeichen aus einer Zeichenfolge
Clive

Antworten:

13

Lesen Sie zunächst in der Drupal-API nach:

So check_plain()codiert Sonderzeichen , die eine besondere Bedeutung in HTML (zB <und &) in Klartext Einheiten (dh &lt;und &amp;jeweils) , die diese machen wörtlich wiedergegeben werden (nicht als HTML interpretiert) , wenn die Zeichenfolge , die dann als Teil einer Seite angezeigt wird mit HTML-Markup. Die Funktion filter_xss()filtert eine HTML-Zeichenfolge, um XSS-Schwachstellen (Cross-Site-Scripting) zu vermeiden. Es macht vier Dinge:

  • Entfernen von Zeichen und Konstrukten, die Browser austricksen können
  • Stellen Sie sicher, dass alle HTML-Entitäten wohlgeformt sind
  • Stellen Sie sicher, dass alle HTML-Tags und -Attribute wohlgeformt sind
  • Stellen Sie sicher, dass keine HTML-Tags URLs mit einem nicht zulässigen Protokoll enthalten (z. B. Javascript :)

Beide Funktionen werden verwendet, um Daten von Benutzern zu bereinigen, um sicherzustellen, dass jede Benutzerinjektion neutralisiert wird, bevor die Daten auf Ihrer Site gerendert werden.

Sie führen niemals dieselbe Zeichenfolge durch beide .

Wenn Sie verwenden, sollte check_plain()die an die Funktion übergebene Zeichenfolge als einfacher Text (nicht als HTML) verwendet werden. Dann filter_xss()wird es nicht benötigt, da check_plain()der String immer als Klartext angezeigt wird.

Wenn Sie verwenden filter_xss(), sollte die an die Funktion übergebene Zeichenfolge HTML sein und check_plain()sie durcheinander bringen.

Wenn ich mir die Vorlage ansehe, die Sie als Beispiel verwenden, sieht es für mich so aus, als ob alle drei Felder, an die übergeben wurde, print()aus Inhalten stammen, die bereits bereinigt sind und keine weitere Bereinigung benötigen.

Wenn Sie jedoch ein eigenes Modul erstellen , das Benutzereingaben sammelt, ohne diese durch einen "sicheren" Textfilter wie "Gefiltertes HTML" oder "Einfach" zu leiten, müssen Sie diese Funktionen für Hygienezwecke verwenden.

Freie Radikale
quelle
Wo kann ich überprüfen, ob Eingaben von Benutzern stammen? Beispielsweise gibt es einen Inhaltstyp, und anonyme Benutzer dürfen diese Art von Knoten erstellen.
M ama D
@Drupalist, Sie sollten dem anonymen Benutzer niemals erlauben, ein "unsicheres" Textformat zu verwenden. Navigieren Sie zu Administration »Konfiguration» Inhaltserstellung »Textformate . Die mit Drupal gelieferten "sicheren" Textformate sind "Gefilterter HTML-Code" und "Nur-Text". Wenn dies die einzigen Formate sind, die für den anonymen Benutzer zulässig sind, führt Drupal die erforderlichen Überprüfungen für jeden integrierten Knotentyp und jeden Knotentyp durch, den Sie mit der Kernfunktion " Felder" erstellen . Wenn sich Ihr Anwendungsfall von diesem unterscheidet, stellen Sie eine neue Frage, in der der Anwendungsfall aufgeführt ist.
Free Radical
Anonyme Benutzer dürfen nur verwendenplain text
M ama D
@ Drupalist, das ist in Ordnung. Diese Funktionen müssen nicht zum Bereinigen von einfachem Text verwendet werden.
Free Radical
3
@ ARUN, nein. Standardmäßige Drupal-Praxis besteht darin, immer genau das zu speichern, was der Benutzer in der Datenbank eingibt, und Text vor dem Rendern zu bereinigen.
Free Radical