2010-04-07 18 views
9

Come posso evitare l'iniezione SQL quando si tratta di ColdFusion? Sono abbastanza nuovo per il linguaggio/framework.Come posso evitare SQL injection con ColdFusion

Ecco la mia domanda esempio.

<cfquery name="rsRecord" datasource="DataSource"> 
    SELECT * FROM Table 
    WHERE id = #url.id# 
</cfquery> 

Vedo passare in url.id come un rischio.

risposta

4
  • utilizzare una stored procedure con parametri
  • cfqueryparam
  • la gestione degli errori in giro per singola query
  • gestione per il sito tramite <cferror> errore
  • logica che limita il numero di richiesta che provengono da un IP specifico in un dato tempo
  • assicurare l'account utente del database ha accesso solo alle azioni specifiche che dovrebbe
0

Uso cfqueryparam è per prevenire SQL injection è buona. Ma, non è possibile utilizzare cachewithin in cfquery tag se si desidera utilizzare cfqueryparam. Il mio consiglio è un altro fare proprio come quella

Put questa condizione nella parte superiore della pagina.

< CFIF TestDefinito ("id") e non IsNumeric (id) > < cfabort showerror = "Stringa di query non valido" > </CFIF >

nel tag ricerca, clicca proprio come questo:

WHERE ID = #Val (id) #

Vedi anche, come prevenire: http://ppshein.wordpress.com/2008/08/28/block-ip-in-coldfusion/

+0

Meglio implementare la memorizzazione nella cache manualmente rispetto a provare a implementare manualmente la protezione del database. –

+0

probabilmente meglio usare cfparam per applicare almeno la digitazione, ma sono d'accordo, è quasi sempre meglio rovinare il caching piuttosto che rovinare la sicurezza – Grey

3

Oltre a cfqueryparam è possibile utilizzare cfparam nella parte superiore della pagina contenente il codice SQL per ogni variabile passata ad esso. Questo aiuta anche la documentazione.

ad es.

<cfparam name="url.id" type="integer"> 

o più avanzato:

<cfparam name="url.id" type="regex" pattern="\d" default=""> 

Poiché sono consentiti modello di espressione regolare, questi possono essere estremamente potente:

<cfparam name="form.place" type="regex" pattern="[A-Z0-9]{1,6}|" default=""> 
     <!--- Upper case Alpa or Numeric, 1-6 characters or empty string ---> 

Assicurarsi inoltre di utilizzare un cferror nell'applicazione . cfm o application.cfc per impedire l'esposizione della tabella delle query e nomi di colonne.

Problemi correlati