Skip to content

Mihai Baboi

Vorbim despre mașini, tehnologie și nu numai

Menu
  • Home
  • Despre mine
  • Despre blog
  • Contact
  • Privacy Policy
Menu

Interogari corecte in ColdFusion – cfqueryparam

Posted on February 27, 2011

In acest articol vom trata modul corect de a construi interogari in ColdFusion. Pentru ca acest limbaj de programare ne pune la dispozitie un tag foarte usor de folosit, suntem tentati sa ne aruncam intr-un <cfquery> si sa nu ne mai uitam la detalii.

Nu ma intelegeti gresit. Nu spun sa nu folositi <cfquery>. Mi se pare ca din toate limbjele de programare, ColdFusion ofera de departe cea mai comoda metoda de a accesa baza de date. Dar <cfquery> nu este intotdeauna de ajuns. Este foarte important sa tinem cont de felul in care construim interogarile atunci cand folosim parametri.

Dupa cum stim, parametrii trimisi catre baza de date nu pot fi lasati “la liber”. Trebuie sa ne ferim de SQL Injection si sa avem grija ca parametrul pe care il trimitem la baza de date este ceea ce ne asteptam noi. Aici ne vine in ajutor tag-ul <cfqueryparam>. El se asigura ca parametrul trimis catre baza de date este “curatat” de tot ce este nociv si stie sa faca inclusiv o validare de baza.

Asadar sa vedem doua bucati de cod in care sa comparam cele doua metode de a scrie interogarile:

Primul exemplu nu foloseste tag-ul <cfqueryparam>. Este doar o interogare in care am inserat o variabila. Si nu este gresit, merge. Doar ca nu este nici sigur. Veti vedea de ce.

	<!--- Interogare fara cfqueryparam --->
	<cfset cityName = "New York">

	<cfquery name="qArtists1" datasource="cfartgallery">
    	SELECT
        	*
        FROM
			artists
		WHERE
			city = '#cityName#'
    </cfquery>

In al doi-lea exemplu avem acelasi cod, cu diferenta ca parametrul este trimis catre SQL prin intermediul tag-ului <cfqueryparam>. Si primul lucru pe care il observam este acela ca verificam ca parametrul sa fie de tip string. Deci, din start avem un avantaj.

	<!--- Interogare cu cfqueryparam --->
	<cfset cityName = "New York">

	<cfquery name="qArtists2" datasource="cfartgallery">
    	SELECT
        	*
        FROM
			artists
		WHERE
			city = <cfqueryparam value="#cityName#" cfsqltype="cf_sql_varchar">
    </cfquery>

Exemplele de mai sus se vor comporta identic. Asta pentru ca variabila #cityName# are o valoare corecta. Dar ce s-ar intampla daca am declara aceasta variabila un pic altfel? De exemplu:

<cfset cityName = "New York;DELETE FROM artists WHERE artistid > 0;">

Aici, tag-ul <cfqueryparam> isi arata adevarata valoare. Daca am rula interogarea ca in primul exemplu, am ramane fara inregistrarile din tabela artists al caror id este mai mare decat zero (adica toate). In schimb, in exemplul al doi-lea, <cfqueryparam> nu numai ca a filtrat query-ul de DELETE, dar a stiut sa aplice filtrul “New York” pentru inregistrarile aduse.

Deci nu numai ca filtram SQL Injection-ul din interogare, dar si pastram parametrul original, ceea ce inseamna ca nu ne va strica functionarea aplicatiei.

Concluzia: ColdFusion ne pune la dispozitie instrumente adecvate pentru cea mai mare parte din problemele comune cu care se intalnesc programatorii. Noi trebuie numai sa ne ne documentam si sa le adoptam pentru a profita la maxim de acest mediu de lucru.

Share this:

  • Click to share on Facebook (Opens in new window) Facebook
  • Click to share on X (Opens in new window) X

Related

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

  • Analiză Tehnică
  • Auto
  • Comunicate
  • Concurs
  • Diverse
  • Evenimente
  • Foto
  • Hardware
  • Întreabă-mă
  • Lansări
  • Mașini
  • Noutăți auto
  • Opinie
  • Programare
  • Review
  • Scurte
  • Șed și Cuget
  • Zvonuri

allview Android aspect autonomie browser bune practici camera CodeIgniter Code Igniter Cold Fusion concluzii concurs css3 display div dual core Evolio evoMAG evoMAG.ro hardware HTC html html5 instalare lansare laptop Library libris.ro marketonline Nikon nokia performanta pret programare review samsung Samsung Galaxy S II smartphone specificatii standarde Symbian tableta teste upgrade user experience

©2025 Mihai Baboi | Design: Newspaperly WordPress Theme