"Higienização suficiente" depende completamente de qual ambiente você está falando. A sanitização para MySQL deve ser considerada inteiramente separada da sanitização para a saída da Web, e você deve tratá-los separadamente para evitar muitos problemas.
Higienização para MySQL
mysql_real_escape_string()
irá limpar um dado e torná-lo seguro para colocar dentro de uma consulta SQL.- Qualquer outro tipo de dado malicioso, como tags HTML dentro da string, deve ser absolutamente ignorado. Tentar manipulá-lo aqui o levará a dores de cabeça ao tentar "desmanipulá-lo" mais tarde, depois de tirá-lo do banco de dados. "Dados da web" ruins não podem prejudicar seu banco de dados.
Higienização para saída
htmlspecialchars($val)
no momento da saída impedirá que quaisquer tags maliciosas sejam renderizadas, porque<
e>
os caracteres são convertidos em suas representações de entidade e não renderizados como delimitadores de tags.- Use o
ENT_QUOTES
modificador se você estiver produzindo algo que está dentro do atributo citado de um elemento HTML, como<input name="email" value="<?php echo htmlspecialchars($email,ENT_QUOTES); ?>" />
Isso deve ser tudo que você precisa, a menos que você tenha requisitos especiais.
strip_tags()
realmente não deve ser usado para sanitização, pois pode ser enganado com HTML mal formado. A sanitização é uma meta válida e, se você puder manter seus contextos separados, terá menos problemas com a manipulação de dados entre eles.