Helper HTMLCleaner
1Apresentação
A principal função deste helper é limpar um fluxo HTML proveniente de um editor WYSIWYG, garantindo que ele não contenha nenhum código proibido. Nesse sentido, ele é uma camada sobre a biblioteca HTMLPurifier.
Ele também oferece a possibilidade de converter texto puro em um fluxo HTML.
2Instalação
Para funcionar corretamente, o objeto HTMLCleaner precisa da biblioteca HTMLPurifier. Existem três soluções para instalá-la.
2.1Instalação via sistema
O método recomendado é usar os pacotes do seu sistema operacional. Por exemplo, no Ubuntu, o HTMLPurifier pode ser instalado facilmente com este comando:
$ sudo apt install php-htmlpurifier
2.2Instalação via Composer
Também é possível usar o gerenciador de dependências Composer (veja a documentação dedicada). Para isso, execute o seguinte comando a partir da raiz do projeto:
$ composer require ezyang/htmlpurifier
2.3Instalação manual
Você também tem a possibilidade de baixar os arquivos manualmente e copiá-los no diretório lib/ do seu projeto.
Atenção: se você colocar os arquivos em um subdiretório (chamado "htmlpurifier", por exemplo), será necessário declarar esse subdiretório na lista de caminhos de inclusão (veja a documentação de configuração). Neste caso, adicione estas linhas no seu arquivo etc/temma.php:
[
'includePaths' => [
'/path/to/project/lib/htmlpurifier'
]
]
3clean()
Função estática que recebe um fluxo HTML e retorna o mesmo fluxo após sua limpeza. Tags HTML não autorizadas são removidas. Atributos de tags não autorizados também são removidos. Múltiplas quebras de linha são transformadas em parágrafos.
Assinatura do método:
\Temma\Utils\HTMLCleaner::clean(string $html, ?bool $targetBlank=null, ?bool $nofollow=null, bool $removeNbsp=true) : string
Parâmetros:
- $html: Fluxo HTML a ser limpo.
-
$targetBlank: Indica se um atributo target="_blank"
deve ser adicionado aos links.
- true para adicionar o atributo a todos os links.
- false para nunca adicionar o atributo.
- null para adicionar o atributo apenas aos links externos (que começam com http:// ou https://).
-
$nofollow: Indica se um atributo rel="nofollow"
deve ser adicionado aos links.
- true para adicionar o atributo a todos os links.
- false para nunca adicionar o atributo.
- null para adicionar o atributo apenas aos links externos (que começam com http:// ou https://).
- $removeNbsp: Indica se os espaços não separáveis devem ser removidos.
Valor retornado: fluxo HTML limpo.
Exemplo:
use \Temma\Utils\HTMLCleaner as TµHTMLCleaner;
$input = <<< EOT
<h1>Título
<p onclick="alert('XSS');">Parágrafo<br>
<br>
<script>alert('XSS');</script>
EOT;
$output = TµHTMLCleaner::clean($input);
/*
<h1>Título</h1>
<p>Parágrafo</p>
*/
4text2html()
Função estática que recebe texto puro e retorna um fluxo HTML. Quebras de linha e parágrafos (blocos de texto separados por uma linha em branco) são tratados, assim como os links.
Assinatura do método:
\Temma\Utils\HTMLCleaner::text2html(string $text, bool $urlProcess=true, bool $nofollow=true) : string
Parâmetros:
- $text: Texto a ser processado.
- $urlProcess: true para processar as URLs. Links para sites externos (que começam com http:// ou https://) abrem em uma nova aba (target="_blank").
- $nofollow: true para definir as URLs como nofollow.
Valor retornado: fluxo HTML gerado.
Exemplo:
use \Temma\Utils\HTMLCleaner as TµHTMLCleaner;
$text = "First paragraph,
on two lines.
Site: https://www.temma.net";
$html = TµHTMLCleaner::text2html($text);
/*
<p>First paragraph,<br />
on two lines.</p>
<p>Site: <a target="_blank" rel="nofollow"
href="https://www.temma.net">https://www.temma.net</a></p>
*/