This document is for a version of CakePHP that is no longer supported. Please upgrade to a newer release!
A classe Sanitize do CakePHP pode ser usada para tratar dados submetidos por um usuário da aplicação, protegendo-a de dados maliciosos e outras informações indesejáveis. Sanitize faz parte do núcleo do CakePHP, podendo então ser utilizada em qualquer parte do seu código. Entretanto, seu uso é mais adequado nos controlers ou nos models.
Tudo o que você precisa é incluir a classe Sanitize em seu código assim:
App::import('Sanitize');
Feito isto, você pode fazer chamadas estáticas à classe Sanitize.
paranoid(string $string, array $allowedChars);
Esta função gera a string de saída removendo tudo da entrada que não sejam caracteres alfanuméricos. A função irá permitir alguns caracteres desde que sejam passados no array $allowedChars.
$badString = ";:<script><html>< // >@@#";
echo Sanitize::paranoid($badString);
// saída: scripthtml
echo Sanitize::paranoid($badString, array(' ', '@'));
// saída: scripthtml @@
html(string $string, boolean $remove = false)
Este método prepara dados submetidos pelo usuário para exibição em um conteúdo HTML. Isto é particularmente útil se você não quer que usuários consigam quebrar o layout de sua aplicação ou inserir imagens ou scripts em suas páginas HTML. Se a opção $remove for definida para true, o conteúdo HTML detectado é removido ao invés de ser renderizado como entidades HTML.
$badString = '<font size="99" color="#FF0000">HEY</font><script>...</script>';
echo Sanitize::html($badString);
// saída: <font size="99" color="#FF0000">HEY</font><script>...</script>
echo Sanitize::html($badString, true);
// saída: HEY...
escape(string $string, string $connection)
Usado para tratar declarações em SQL com a adição de barras de escape, dependendo da configuração magic_quotes_gpc do sistema. $connection é o nome da base de dados, definido em seu arquivo app/config/databasel.php, em que o tratamento deve ser aplicado.
Sanitize::clean(mixed $data, mixed $options)
Este é um método de limpeza de dados de padrão industrial e multiuso, o que quer dizer que ele foi feito para ser utilizado em arrays inteiros (como o $this->data, por exemplo). O método recebe um array (ou uma string) e retorna sua versão limpa. As seguintes operações de limpeza são executadas em cada elemento do array (recursivamente):
Caracteres de espaçamento diversos quaisquer (incluindo 0xCA) são substituídos por espaços simples.
Forte verificação de caracteres especiais e remoção de quebras de linha para melhoria da segurança em SQL.
Adição de barras de escape para SQL (uma chamada interna ao método sql mostrado anteriormente).
Troca de barras invertidas da entrada do usuário por barras invertidas confiáveis.
O argumnto $options pode ser tanto uma string como um array. Quando uma string for informada, significará o nome de uma conexão de base de dados. Se um array for informado, ele poderá ser composto das seguintes opções:
connection
odd_spaces
encode
dollar
carriage
unicode
escape
backslash
Então, chamar o método clean() com opções seria algo como:
$this->data = Sanitize::clean($this->data, array('encode' => false));