2012-09-12 8 views
9

Vuol execute($input_parameter) proteggere dalle iniezioni SQL proprio come bindParam/bindValue?

Se la risposta è sì, bindParam()/bindValue()/execute() sono invulnerabile a qualsiasi attacco SQL-Inject? O ho bisogno di prendere misure per prevenire tali attacchi ?.

Grazie per l'aiuto !.

risposta

0

Sì, lo fa la stessa cosa. Non posso dire che sia invulnerabile, perché il motore SQL sottostante potrebbe essere esso stesso vulnerabile. Ma quello non è più nelle tue mani.

Così per tutti i motivi pratici, sì, la sua sicurezza.

MODIFICA: Guarda il PHP Documentation (primo e secondo esempio). Uno è con bindParam() e l'altro utilizza execute().

2

Per quanto riguarda il execute($input_parameters) come un numero di passi separati bindParam/bindValue/execute, la risposta sembra essere fondamentalmente, sì.

Tuttavia, potrebbe essere necessario adottare ulteriori misure a seconda di come è stata costruita la stringa di query passata alla chiamata PDO::prepare. Non è sempre possibile parametrizzare tutto nella stringa di query preparata. Ad esempio, non è possibile utilizzare un parametro per un nome di tabella o colonna. Se si autorizzano dati utente o dati esterni in quella stringa di query, è necessario disinfettare i dati prima di passare la stringa a prepare. Fare riferimento a queste domande StackOverflow per maggiori dettagli:

In generale si dovrebbe essere il filtraggio di tutti i dati di input in ogni caso, quindi, se si voleva avere una maggiore sicurezza si può sterilizzare qualsiasi immetti dati destinati a materiale di tipo SQL utilizzando i filtri appropriati per le tue esigenze o scrivendo anche una funzione personalizzata FILTER_CALLBACK se lo desideri. Nel caso di nomi di tabelle o colonne provenienti da dati forniti dall'utente, una tecnica di convalida comune consiste nel controllare i valori rispetto agli array di nomi consentiti.

Spero che questo aiuti. In bocca al lupo. Rimanga sicuro! ;)

Problemi correlati