Come e quando utilizzare filter_xss () e check_plain ()?


11

Ci sono molti file modello come questo views-view-fields--magazine--magazine.tpl.phpnel mio sito web. come e quando dovrei usare filter_xss () e check_plain () per migliorare la sicurezza? per esempio questo è il codice:

<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>

Come posso applicare quelle funzioni in esso?


Utilizzare filter_xss()quando si desidera filtrare XSS da contenuti potenzialmente pericolosi (ovvero contenuti di un utente non attendibile) e check_plain()quando si desidera sfuggire a caratteri speciali HTML da una stringa
Clive

Risposte:


13

Per prima cosa, leggi su questi nell'API Drupal:

Quindi check_plain()codifica caratteri speciali che hanno un significato speciale in HTML (come <e &) in entità di testo semplice (cioè &lt;e &amp;rispettivamente) che li renderanno letteralmente (non interpretati come HTML) quando quella stringa che viene quindi visualizzata come parte di una pagina con HTML markup. La funzione filter_xss()filtra una stringa HTML per prevenire vulnerabilità cross-site-scripting (XSS). Fa quattro cose:

  • Rimozione di personaggi e costrutti che possono ingannare i browser
  • Assicurarsi che tutte le entità HTML siano ben formate
  • Assicurarsi che tutti i tag e gli attributi HTML siano ben formati
  • Assicurarsi che nessun tag HTML contenga URL con un protocollo non consentito (ad es. Javascript :)

Entrambe le funzioni vengono utilizzate per disinfettare i dati dagli utenti per assicurarsi che qualsiasi iniezione da parte dell'utente sia neutralizzata prima che i dati vengano visualizzati sul tuo sito.

Non passare mai la stessa stringa attraverso entrambi .

Se si utilizza check_plain(), si suppone che la stringa passata alla funzione sia utilizzata come testo normale (non HTML). Quindi filter_xss()non è necessario, poiché check_plain()renderà sempre la stringa di testo semplice.

Se lo usi filter_xss(), la stringa passata alla funzione dovrebbe essere HTML e check_plain()la rovinerà.

Quando guardo il modello che usi come esempio, mi sembra che tutti e tre i campi passati print()provengano da contenuti che sono già disinfettati e non necessitano più di servizi igienico-sanitari.

Tuttavia, se si crea il proprio modulo che raccoglie l'input dell'utente senza passare attraverso un filtro di testo "sicuro" come "HTML filtrato" o "Semplice", è necessario utilizzare queste funzioni a fini di risanamento.


Dove posso verificare se gli input provengono dagli utenti? ad esempio esiste un tipo di contenuto e agli utenti anonimi è consentito creare quel tipo di nodi.
M ama D,

@Drupalist, non dovresti mai consentire all'utente anonimo di utilizzare un formato di testo "non sicuro". Passare ad Amministrazione »Configurazione» Creazione contenuto »Formati di testo . I formati di testo "sicuri" forniti con Drupal sono "HTML filtrato" e "Testo normale". Se questi sono gli unici formati consentiti per l'utente anonimo, Drupal esegue i controlli necessari per qualsiasi tipo di nodo incorporato e qualsiasi tipo di nodo creato con la funzione Campi principali . Se il tuo caso d'uso è diverso da questo, fai una nuova domanda spiegando il caso d'uso.
Radical gratuito

Gli utenti anonimi possono utilizzare soloplain text
M ama D

@Drupalist, va bene. Non è necessario utilizzare queste funzioni per disinfettare il testo normale.
Free Radical

3
@ARUN, no. La pratica standard di Drupal consiste nel salvare sempre esattamente ciò che l'utente digita nel DB e nel disinfettare il testo prima del rendering.
Radicale gratuito il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.