Pergunta

Eu vi lotes de artigos e perguntas sobre mysqli, e todos eles afirmam que ela protege contra injeções SQL. Mas é à prova de idiotas, ou ainda há alguma maneira de contornar isso. Eu não estou interessado em scripting cross site ou ataques de phishing, apenas injeções de SQL.

O que eu deveria ter dito para começar é que eu estou usando declarações preparadas. Isso é o que eu quis dizer com mysqli. Se eu usar declarações preparadas sem qualquer concatenação, então é infalível?

Foi útil?

Solução

Mas é à prova de idiotas, ou ainda há alguma maneira de contornar o problema.

Não, você tem que saber o que está fazendo. Se você usar parâmetros vinculados (recurso A que Mysqli vem com), você está completamente a salvo de ataques do tipo injeção a partir deste vetor de ataque . Isso não impede que você - o programador - de incorporação cordas diretamente, e permitindo ataques de injeção. Você tem que usar o recurso como pretendido.

Re: Editar

O que eu deveria ter dito para começar é que eu estou usando declarações preparadas. Isso é o que eu quis dizer com mysqli. Se eu usar declarações preparadas sem qualquer concatenação, então é infalível?

infalível ainda é uma palavra tão perigoso. Mas você está seguro de ataques de injeção para as variáveis ??que estão vinculados por meio de declarações preparadas. Isso ocorre porque os parâmetros vinculados são transmitidos separadamente da consulta SQL. Com a aproximação cordas incorporar "tradicional", as necessidades do servidor de banco de dados para analisar a entrada e existem muitos casos de ponta em que (Charsets etc.). Quando os dados ea consulta são enviados em separado, não há nenhuma análise real acontecendo (pelo menos não a análise dos dados variável).

Outras dicas

Ele não protege de injeções SQL nada melhor do que o módulo mysql de idade, só faz fazê-lo mais fácil para o desenvolvedor, que agora pode usar declarações preparadas em vez de chamar mysql_real_escape_string.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top