magic quotes - Magic quotes

Magic quotes foi uma característica do PHP linguagem de script , onde cordas são automaticamente escapou caracteres usos especiais são prefixados com uma barra invertida -antes sendo repassado. Foi introduzido para ajudar os recém-chegados gravação funcionando comandos SQL sem a necessidade de escapar manual. Mais tarde, foi descrita como destinada a impedir que os desenvolvedores inexperientes de escrever código que era vulnerável a injeção SQL ataques.

Este recurso foi oficialmente removida em PHP 5.3.0 e removido no PHP 5.4, devido a preocupações de segurança.

Conceito

A actual revisão do manual PHP menciona que a lógica por trás magic quotes era "ajudar [evitar] código escrito por iniciantes seja perigoso." No entanto, foi originalmente introduzido no PHP 2 como um ajuste para msql apenas escapar aspas simples php.h tempo de compilação "tornando mais fácil para passar dados de formulário diretamente para msql consultas". Ele foi originalmente concebido como uma "característica de conveniência, e não como [a] recurso de segurança."

O escopo uso para magic quotes foi ampliado em PHP 3. As aspas simples, aspas duplas, barras invertidas e caracteres nulos em todos os dados fornecidos pelo usuário, todos têm uma barra invertida prefixado para eles antes de ser passado para o script nos $_GET, $_REQUEST, $_POSTe $_COOKIEvariáveis globais. Os desenvolvedores podem, em seguida, em teoria usar concatenação para construir consultas SQL seguras com os dados fornecidos pelo usuário. (Esta foi mais precisa quando o PHP 2 e 3 foram PHP corrente, uma vez que as bases de dados primários suportado permitido apenas um-byte conjuntos de caracteres.)

Crítica

Magic quotes foram ativadas por padrão em novas instalações do PHP 3 e 4, mas pode ser desativado por meio do magic_quotes_gpc diretiva de configuração. Desde a operação de magic quotes estava por trás das cenas e não imediatamente óbvias, os desenvolvedores podem deixar de ter conhecimento da sua existência e os problemas potenciais que poderiam introduzir. A documentação PHP apontou várias armadilhas e recomendou que, apesar de ser ativado por padrão, eles devem ser desativados.

Problemas com magic quotes incluído:

  • Nem todos os dados que são fornecidos pelo usuário são destinados para inserção em um banco de dados. Eles podem ser prestados diretamente na tela, armazenada em uma sessão, ou visualizado antes de salvar. Isto pode resultar em barras invertidas sendo adicionado quando eles não são desejados e sendo mostrado para o utilizador final. Este erro muitas vezes se arrasta em mesmo software amplamente utilizado.
  • Nem todos os dados que são fornecidos pelo usuário e utilizados em uma consulta de banco de dados são obtidos diretamente de fontes protegidas por magic quotes. Por exemplo, um valor fornecido pelo utilizador pode ser inserida numa base de dados, protegido por citações mágicas, e depois recuperados a partir da base de dados e utilizada numa operação de banco de dados subsequente. A última utilização não é protegido por magic quotes, e um programador ingênuo usado para depender deles podem não estar cientes da necessidade de protegê-la explicitamente.
  • Magic quotes também usar a funcionalidade genérico fornecido pelo PHP addslashes()função, que não é Unicode-aware e ainda está sujeito a vulnerabilidades de injeção SQL em algumas codificações de caracteres multi-byte. Funções específicas do banco de dados, tais como mysql_real_escape_string()ou, quando possíveis consultas, preparados com os parâmetros ligados, são os preferidos.
  • Enquanto muitos sistemas de gerenciamento de banco de dados de suporte escapar citações com uma barra invertida, o padrão realmente chama para usar outra citação. Magic quotes não oferecem proteção para bancos de dados não criadas para apoiar citações escapando com uma barra invertida.
  • A portabilidade é um problema se um aplicativo é codificado com a suposição de que magic quotes estão habilitados e é então transferido para um servidor onde eles estão desativados, ou vice-versa.
  • Adicionando magic quotes e, posteriormente, removê-los se for o caso incorre em uma pequena, mas desnecessária quantidade de sobrecarga de desempenho.
  • Magic quotes não protegem contra outras vulnerabilidades de segurança comum, tais como cross-site scripting ataques ou de injeção de cabeçalho SMTP ataques.

Em novembro de 2005 os desenvolvedores PHP centrais decidiu que, devido a estes problemas, os magic quotes recurso seria removida do PHP 6. Quando o desenvolvimento de PHP 6 parado e desenvolvimento contínuo no ramo 5.x em vez disso, o recurso foi preterido no PHP 5.3. 0 e removidos no ponto 5.4.

outras abordagens

  • Algumas linguagens como Perl e rubi optar por uma abordagem que envolve tainting de dados , onde os dados de fontes não confiáveis, como a entrada do usuário, são considerados "contaminados" e não pode ser usado para operações perigosas até que seja explicitamente marcado como confiável, geralmente após a validação ou codificação . Desde a construção de consultas SQL é considerado "perigoso", neste contexto, isso força o programador a resolver o problema. Não manchar não resolve o problema, mas destaca casos em que há um problema para que o programador é capaz de resolvê-los de forma adequada.
  • Joel Spolsky sugeriu usar uma forma de notação húngara que indica se os dados são seguros ou inseguros.
  • Motores de banco de dados modernos e bibliotecas usar consultas parametrizadas para passar dados para o banco de dados separadamente de comandos SQL, reduzindo a necessidade de escapar de dados antes de construir as consultas.

Veja também

Referências

links externos