wpdb-insert: eu preciso preparar contra injeção de SQL?

11

Eu preciso usar wpdb prepare before wpdb- > insert?

Se eu estiver inserindo valores em uma tabela wordpress usando wpdb- > insert, eu preciso "limpar" meus dados antes de inseri-los ou esse método (wpdb- > insert) faz isso por mim?

    
por redconservatory 15.08.2011 / 13:57

3 respostas

17

Não, você não deve preparar ou escapar dos dados, isso é feito para você pela classe wpdb .

A partir da referência de classe do wpdb :

  

data :

     

(matriz) Dados a serem inseridos (em pares de valores de coluna = >). As colunas $ data e $ data devem estar "raw" (nem devem ser SQL com escape).

Se, no entanto, você estava escrevendo seu próprio SQL em vez de usar o método insert , então sim, você deve escapar usando prepare .

    
por nobody 15.08.2011 / 14:23
0

O seguinte é um aviso para a classe wpdb.

enlace

  

Um aviso

     

Algumas das funções dessa classe usam uma instrução SQL como entrada.   Você deve SQL escapar todos os valores não confiáveis que você incorpora no SQL   consulta para evitar ataques de injeção de SQL. Verifique a documentação para ver   se a função que você planeja usar escapa SQL para você ou espera que ele   ser pré-escapado.

Então eu li isso como - a classe wpdb não prepara ou escapa automaticamente os dados para você.

Tenho certeza de que, se você não puder confiar 100% na fonte de dados em seu código, sugiro usar a classe de preparação (?).

Não pense que o uso da classe de preparação corrigirá o problema sem usar a classe de preparação adequadamente. Eu sou relativamente novo nisso, então por favor poste quaisquer correções como resposta se eu não estiver certo.

$ wpdb- > prepare ("SELECIONE * DA tabela WHERE ID =% d E nome =% s", $ id, $ nome);

Na declaração acima, existem dois atributos extras. Um para o ID e outro para o nome. Tanto quanto eu li, cada um corresponde ao número de itens em sua consulta. Também% s = string,% d = inteiro e% f = float.

Além disso, da minha leitura, se você não colocar os atributos extras, então o preparo não fará nada. Haverá um aviso, mas se você desligar isso, talvez você não saiba.

Aqui está um exemplo da própria referência de classe, onde eles adicionam uma classe de preparação em um INSERT abaixo.

enlace

  

Consulta $ wpdb- > ($ wpdb- > prepare ("INSERT INTO $ wpdb- > postmeta (   post_id, meta_key, meta_value) VALUES (% d,% s,% s) ",           array (10, $ metakey, $ metavalue)));

A minha preocupação é que a resposta votada esteja incorreta de acordo com a mesma página que 'nobody' referencia. Eu estou supondo que você use prepare (), mas não outros métodos padrão de escape php porque eu tomei esta resposta tão correta assim ... até cavar mais fundo.

De qualquer forma ... talvez as coisas tenham mudado desde a resposta original.

    
por Felixius 28.08.2018 / 08:36
0

Não, você não precisa evitar as injeções de SQL ao usar - wpdb insert ou wpdb delete.

Veja os links a seguir:

enlace

enlace

    
por oguegbu ijeoma 03.12.2018 / 13:24

Tags