Como e quando usar filter_xss () e check_plain ()?

11

Existem muitos arquivos de modelo como este views-view-fields--magazine--magazine.tpl.phpno meu site. como e quando devo usar o filter_xss () e check_plain () para melhorar a segurança? por exemplo, este é o código:

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

Como posso aplicar essas funções?

M ama D
fonte
Use filter_xss()quando quiser XSS filtro de conteúdo potencialmente perigoso (ou seja, o conteúdo de um usuário não confiável), e check_plain()quando você quiser escapar HTML caracteres especiais de uma string
Clive

Respostas:

13

Primeiro, leia sobre isso na API Drupal:

Então, check_plain()codifica caracteres especiais com significado especial em HTML (como <e &) em entidades de texto sem formatação (ou seja, &lt;e &amp;respectivamente) que farão com que sejam renderizados literalmente (não interpretados como HTML) quando a sequência que for exibida como parte de uma página com Marcação HTML. A função filter_xss()filtra uma sequência de caracteres HTML para evitar vulnerabilidades de script entre sites (XSS). Faz quatro coisas:

  • Removendo caracteres e construções que podem enganar navegadores
  • Garantir que todas as entidades HTML sejam bem formadas
  • Garantir que todas as tags e atributos HTML sejam bem formados
  • Certificando-se de que nenhuma tag HTML contenha URLs com um protocolo não permitido (por exemplo, javascript :)

Ambas as funções são usadas para limpar os dados dos usuários para garantir que qualquer injeção de usuário seja neutralizada antes que os dados sejam renderizados em seu site.

Você nunca passa a mesma corda pelos dois .

Se você usar check_plain(), a sequência passada para a função deve ser usada como texto sem formatação (não HTML). Então filter_xss()não é necessário, pois check_plain()sempre tornará a string texto sem formatação.

Se você usar filter_xss(), a string passada para a função deve ser HTML e check_plain()a bagunçará.

Quando olho para o modelo que você usa como exemplo, parece-me que todos os três campos passados ​​são print()provenientes de conteúdo já higienizado e que não precisa de mais saneamento.

No entanto, se você criar seu próprio módulo que coleta as entradas do usuário sem passar por um filtro de texto "seguro", como "HTML filtrado" ou "Sem formatação", você deve usar essas funções para fins de limpeza.

Radical livre
fonte
Onde posso verificar se as entradas são provenientes dos usuários? por exemplo, existe um tipo de conteúdo e usuários anônimos têm permissão para criar esse tipo de nós.
M AMA D
@Drupalist, você nunca deve permitir que o usuário anônimo use um formato de texto "não seguro". Navegue para Administração »Configuração» Criação de conteúdo »Formatos de texto . Os formatos de texto "seguros" que acompanham o Drupal são "HTML filtrado" e "Texto sem formatação". Se estes são os únicos formatos permitidos para o usuário anônimo, o Drupal executa as verificações necessárias para qualquer tipo de nó interno e qualquer tipo de nó criado com o recurso principal de campos . Se o seu caso de uso for diferente disso, faça uma nova pergunta explicitando o caso de uso.
Radical grátis
Os utilizadores anónimos só são autorizados a utilizarplain text
H AMA D
@ Drupalist, tudo bem. Não é necessário usar essas funções para limpar o texto sem formatação.
Free Radical
3
@ARUN, não. A prática padrão do Drupal é sempre salvar exatamente o que o usuário digita no banco de dados e limpar o texto antes da renderização.
Free Radical