Capita spesso di fare delle query per la selezione di un singolo record nel db passando la chiave primaria (numerica), oppure fare filtri particolari.
Dei buontemponi però si divertono a passare dei valori come parametro (via GET) inserendo “OR 1=1″ dopo il numero della vostra chiave e facendo in modo di saltare il vostro filtro e visualizzare tutti gli elementi presenti nella vostra tabella.
Per risolvere il problema si può inserire nella query al posto di
WHERE id = #id#
il tag ColdFusion
WHERE id =
<cfqueryparam value="#id#" cfsqltype="cf_sql_integer">
che controlla il tipo di dato passato come parametro.
Questo genera un errore, però non può essere usato in una query nella cui dichiarazione ci siano i parametri CFCACHEWITHIN e CFCACHEAFTER
Come soluzione si può inserire nel application.cfm questo veloce controllo per tutti i parametri GET numerici.
<cfsetting enablecfoutputonly="yes">
<cfset urlNumericParam="id_news,id_servizio,id_prodotto,id_categoria">
<cfloop index="i" list="#urlNumericParam#">
<cfset parametro="url." & i>
<cfif isDefined(parametro)><br>
<cfif not isNumeric(evaluate(parametro))>
<cfoutput><H1>PARAMETRO ERRATO</H1></cfoutput>
<cfabort>
</cfif>
</cfif>
</cfloop>
<cfsetting enablecfoutputonly="no">
Se trovi questo articolo su un blog diverso da “blog.merlinox.com” si tratta probabilmente di una copia non autorizzata. L’indirizzo originale di questo articolo è: CF – controllo parametri scritto da Merlinox.
