Primeiro, mantenha o texto lógico e limpo:
trim() -- OK
htmlentities($comment, ENT_NOQUOTES) -- No; do later
mysqli_real_escape_string() -- Yes; required by API
nl2br() -- No; see below
A lógica por trás dessas recomendações:Os dados no banco de dados devem ser apenas dados simples. Não htmlentities, não br-tags. Mas, você deve fazer o escape_string para passar os dados do PHP para o MySQL; as fugas não serão armazenadas.
Mas... Esse é apenas o passo do meio. De onde vieram os dados? Versões mais antigas do PHP tentam "proteger" você adicionando escapes e outros lixos que funcionam bem para HTML, mas estraga o MySQL. Desligue esse escape mágico e obtenha os dados brutos.
Para onde vão os dados? Provavelmente HTML? Após
SELECTing
os dados de volta da tabela, então primeiro faça htmlentities()
e (opcionalmente) nl2br()
; Observe que, se você espera preservar coisas como
<I>
(para itálico), você está pedindo problemas - grandes problemas. Tudo o que um hacker precisa fazer é <script> ...
para injetar todo tipo de maldade em sua página da web e possivelmente em todo o seu sistema.