Je construis une dynamique requête SQL en utilisant CFLoop
. J'utilise CFSaveContent
pour parcourir les variables et générer la requête, puis je l'exécute dans CFQuery
en utilisant PreserveSingleQuotes
. Cela fonctionne très bien, mais le problème avec cette méthode est que je ne peux pas utiliser CFQueryParam
donc ma requête est vulnérable aux injections. Est-ce que je me demandais s'il y avait une solution de contournement pour ce problème?PreserveSingleQuotes et CFQueryParam
Mise à jour:
<cfsavecontent variable="sqlstring">
SELECT id
,(CASE
<cfloop query="qGetRules">
WHEN val1 >=#qGetRules.equ# AND val2 >#arguments.leve# THEN 1
</cfloop>
ELSE 0
END) AS criteria
FROM mt4_users
</cfsavecontent>
<cfquery name="qGetEquity" datasource="mydatasource">
#PreserveSingleQuotes(variables.sqlstring)#
</cfquery>
donc sur cet exemple que vous pouvez voir que je ne peux pas utiliser cfqueryparam
pour le arguments.leve
car il se bloque sur PreserveSingleQuotes
Avez-vous regardé les documents sur les [équivalents cfscript de cfquery et cfqueryparam] (https://helpx.adobe.com/coldfusion/cfml-reference/script-functions-implemented-as-cfcs/query. html)? – Leigh
En théorie, nous validons tous les champs fournis par l'utilisateur tout le temps. S'appuyer uniquement sur le paramètre de requête pour la sécurité n'est pas aussi sûr que vous pourriez l'être. En outre, PreserveSingleQuotes a sa place, mais je n'ai jamais eu affaire avec succès aux apostrophes. –
Puisqu'il s'agit d'un webservice pour mobile, je ne suis pas en mesure de valider la saisie de l'utilisateur (à côté de l'application mobile). Si quelqu'un renifle l'URL et essaie d'injecter le SQL, je vais devoir l'arrêter. – BlackM