CF – controllo parametri

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">

Loading Facebook Comments ...

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *