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

Você deve usar declarações preparadas apenas para escapar?


A diferença considerada insignificante.

No entanto, é preciso distinguir declarações preparadas nativamente da ideia geral de uma declaração preparada.

O primeiro é apenas uma forma de executar consultas suportadas pela maioria dos DBMS, explicado aqui . Seu uso pode ser questionado.
Este último é uma ideia geral de substituir os dados reais por um placeholder, implicando no processamento adicional dos dados substituídos. É amplamente utilizado em programação, um conhecido printf() função é um exemplo. E esta última abordagem deve ser SEMPRE usada para executar uma consulta em um banco de dados , não importa se é apoiado por instruções preparadas nativas ou não. Porque:
  • instrução preparada torna a formatação (ou manipulação) adequada inevitável .
  • instrução preparada faz a formatação (ou manipulação) apropriada no único lugar apropriado - logo antes da execução da consulta, não em outro lugar, portanto, nossa segurança não dependerá de fontes não confiáveis ​​como
    • algum recurso 'mágico' do PHP que estraga os dados em vez de torná-los seguros.
    • boa vontade de um (ou vários) programadores, que podem decidir formatar (ou não) nossa variável em algum lugar do fluxo do programa. Esse é o ponto de grande importância.
  • instrução preparada afeta o próprio valor que está entrando na consulta, mas não a variável de origem, que permanece intacta e pode ser usada no código adicional (a ser enviada por e-mail ou exibida na tela).
  • instrução preparada pode tornar o código do aplicativo drasticamente mais curto, fazendo toda a formatação nos bastidores (*somente se o driver permitir).

Portanto, mesmo que você considere não usar instruções preparadas nativas (o que é bastante aceitável), você sempre deve criar suas consultas usando espaços reservados em vez dos dados reais. Para isso, você pode usar PDO , que funciona exatamente como descrito acima - por padrão, apenas emular prepara , significa que a consulta SQL regular está sendo criada a partir da consulta e dos dados preparados e, em seguida, executada no banco de dados.

No entanto, o PDO não tem suporte para muitos tipos de dados importantes, como identificador ou uma matriz - portanto, não é possível usar sempre espaços reservados e, portanto, torna possível uma injeção. Felizmente, safeMysql tem espaços reservados para todos os tipos de dados e permite que você execute consultas com segurança.