Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Entradas do usuário, limpe e higienize antes de enviar para o banco de dados


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.