unção de limpeza XSS segura (atualizada regularment

Eu tenho procurado a rede agora há alguns dias tentando descobrir isso, mas obtendo respostas conflitante

Existe uma biblioteca, classe ou função para PHP que higieniza / codifica com segurança uma string no XSS? Ele precisa ser atualizado regularmente para combater novos ataques.

Tenho alguns casos de uso:

Use case 1) Eu tenho um campo de texto simples, digamos, para um nome ou sobrenome

User insere texto no campo e envia o formulárioAntes que isso seja salvo no banco de dados que eu querouma apare qualquer espaço em branco na frente e no final da corda eb) tira todas as tags HTML da entrada. É um campo de texto de nome, eles não devem conter HTML.Em seguida, salvarei isso no banco de dados com instruções preparadas pelo DO

Estou pensando que eu poderia fazertrim() estrip_tags() então use umSanitize Filter ou RegEx com uma lista de desbloqueio de caracteres. Eles realmente precisam de personagens como! e? ou< > no nome deles, na verdade não.

Use case 2) Ao enviar o conteúdo de um registro de banco de dados salvo anteriormente (ou de um formulário enviado anteriormente) para o View / HTML, desejo limpá-lo completamente para XSS.NB: Pode ou não ter passado pela etapa de filtragem no caso de uso 1, pois pode ser um tipo de entrada diferente, portanto, suponha que nenhuma limpeza tenha sido feit

Inicialmente, pensei que o HTMLPurifier faria o trabalho, mas, como parece, énã o que eu preciso quandoFiz a pergunta para o seu apoio:

Aqui está o teste decisivo: se um usuário enviar<b>foo</b> deve aparecer como<b>foo</b> ou foo? Se for o primeiro, você não precisa do Purificador HTML.

Então eu prefiro que apareceu como<b>foo</b> porque eu não quero nenhum HTML exibido para um campo de texto simples ou qualquer JavaScript em execuçã

Então eu tenho procurado por uma função que fará tudo por mim. Eu tropecei através doxss_clean método usado pelo Kohana 3.0 que eu acho que funciona, mas é apenas se você quiser manter o HTML. Agora ele foi descontinuado do Kohana 3.1, pois foi substituído pelo HTMLPurifier. Então, acho que você deveria fazerHTML::chars() em vez disso, o que apenaseste código:

public static function chars($value, $double_encode = TRUE)
{
    return htmlspecialchars( (string) $value, ENT_QUOTES, Kohana::$charset, $double_encode);
}

Agora, aparentemente, você deveria usar htmlentities como mencionado em alguns lugares no Stack Overflow porque é mais seguro que htmlspecialchars.

Então, como uso as htmlentities corretament Isso é tudo que eu preciso?Como se protege contra os valores codificados hex, decimal e base64 enviados pelos ataques listadosAqu?

gora, vejo que o terceiro parâmetro para o método htmlentities é o charset a ser usado na conversão. Agora, meu site / db está em UTF-8, mas talvez os dados enviados pelo formulário não tenham sido codificados em UTF-8, talvez eles tenham enviado ASCII ou HEX, então talvez seja necessário convertê-lo em UTF-8 primeiro? Isso significaria algum código como:

$encoding = mb_detect_encoding($input);
$input = mb_convert_encoding($input, 'UTF-8', $encoding);
$input = htmlentities($input, ENT_QUOTES, 'UTF-8');

Sim ou não? Ainda não tenho certeza de como proteger contra as possíveis entradas XSS hexadecimais, decimais e base64 ...

Se houver alguma biblioteca ou estrutura PHP de código aberto que possa proteger corretamente o XSS, eu estaria interessado em ver como eles fazem isso no códig

Qualquer ajuda muito apreciada, desculpe pelo longo post!

questionAnswers(2)

yourAnswerToTheQuestion