ti-enxame.com

htmlspecialchars vs htmlentities quando se trata de XSS

Eu já vi muitas respostas conflitantes sobre isso. Muitas pessoas gostam de citar que as funções php por si só não o protegerão do xss.

O que o XSS pode fazer exatamente através de htmlspecialchars e o que pode fazê-lo através de htmlentities?

Entendo a diferença entre as funções, mas não os diferentes níveis de proteção xss que lhe restam. Alguém poderia explicar?

28
stuckinphp

o htmlspecialchars () NÃO o protegerá contra explorações UTF-7 XSS, que ainda afetam o Internet Explorer, mesmo em IE 9: http://securethoughts.com/2009/05/ exploiting-ie8-utf-7-xss-vulnerability-using-local-redirection /

Por exemplo:

<?php
$_GET['password'] = 'asdf&ddddd"fancy˝quotes˝';

echo htmlspecialchars($_GET['password'], ENT_COMPAT | ENT_HTML401, 'UTF-8') . "\n";
// Output: asdf&amp;ddddd&quot;fancyË

echo htmlentities($_GET['password'], ENT_COMPAT | ENT_HTML401, 'UTF-8') . "\n";
// Output: asdf&amp;ddddd&quot;fancy&Euml;quotes

Você sempre deve usar htmlentities e muito raramente usar htmlspecialchars ao limpar a entrada do usuário. Além disso, você deve sempre remover as tags antes. E para sites realmente importantes e seguros, você deve [~ # ~] nunca [~ # ~] confiar em strip_tags () Use HTMLPurifier para PHP .

13
Theodore R. Smith

Se o comando header do PHP for usado para definir o conjunto de caracteres

header('Content-Type: text/html; charset=utf-8');

então htmlspecialchars e htmlentities devem ser seguros para a saída de HTML porque XSS não pode ser alcançado usando codificações UTF-7.

Observe que essas funções não devem ser usadas para gerar valores em JavaScript ou CSS, porque seria possível inserir caracteres que permitam que o JavaScript ou CSS seja ignorado e coloque seu site em risco. Por favor, consulte o XSS Prevention Cheat Sheet sobre como lidar adequadamente com essas situações.

4
SilverlightFox

Não tenho certeza se você encontrou a resposta que estava procurando, mas também estou procurando um limpador de HTML. Eu tenho um aplicativo que estou construindo e quero poder pegar código HTML, possivelmente até Javascript ou outras linguagens, e colocá-los em um banco de dados MySQL sem causar problemas nem permitir problemas com XSS. Eu encontrei Purificador de HTML e parece ser a ferramenta mais desenvolvida e ainda mantida para limpar as informações enviadas por usuários em um PHP system.A página vinculada é a página de comparação que pode gerar um raciocínio sobre o porquê de sua ferramenta ou outra ferramenta poder ser útil.Espero que isso ajude!

2
Jonny5 Alive