2008-09-05 14 views
23

में ऑपरेटर के साथ मुझे कई कोल्डफ्यूजन साइट्स के माध्यम से जाने का काम सौंपा गया है जो हाल ही में एक बदतर एसक्यूएल इंजेक्शन हमले का विषय रहा है। असल में मेरे काम में सभी इनलाइन एसक्यूएल में <cfqueryparam> टैग जोड़ना शामिल है। अधिकांश भाग के लिए मुझे यह मिल गया है, लेकिन क्या कोई मुझे बता सकता है कि LIKE ऑपरेटर के साथ cfqueryparam का उपयोग कैसे करें?cfqueryparam कोल्डफ्यूजन

अपनी क्वेरी इस तरह दिखाई देता है:

select * from Foo where name like '%Bob%' 

क्या की तरह मेरे <cfqueryparam> टैग देखना चाहिए?

उत्तर

45

@ जोएल, मुझे असहमत होना है।

select a,b,c 
from Foo 
where name like <cfqueryparam cfsqltype="columnType" value="%#variables.someName#%" /> 
  1. कभी किसी को है कि वे चाहिए करने के लिए सुझाव 'स्टार का चयन करें। " बुरा रूप का! एक उदाहरण के लिए भी! (यहां तक ​​कि प्रश्न से भी कॉपी किया गया है!)

  2. क्वेरी पूर्व संकलित है और आपको क्वेरी में पारित पैरामीटर के हिस्से के रूप में जंगली कार्ड वर्ण (ओं) शामिल करना चाहिए। यह प्रारूप अधिक पठनीय है और अधिक कुशलता से चलाएगा।

  3. स्ट्रिंग कॉन्सटेनेशन करते समय, एम्परस ऑपरेटर() का उपयोग करें, प्लस साइन नहीं। तकनीकी रूप से, ज्यादातर मामलों में, प्लस ठीक काम करेगा ... जब तक आप स्ट्रिंग के बीच में नंबरफॉर्मैट() फेंक नहीं देते और सोचते हैं कि आपको क्यों बताया जा रहा है कि जब आप चेक कर चुके हैं तो आप एक वैध नंबर नहीं दे रहे हैं और आप कर रहे हैं।

+0

का चयन नहीं * पर सहमत है, लेकिन मैं सिर्फ मूल प्रश्न में नमूना क्वेरी से मेल खाता था। –

+0

@ एडम, पवित्र सीआर @ पी यह एक पुराना जवाब है। हालांकि अभी भी 100% सही है। मैंने अभी इसे बहुत उपयोगी पाया है। –

-1
select a,b,c 
from Foo 
where name like <cfqueryparam cfsqltype="cf_sql_varchar" value="%Bob%" />; 
+1

यह अनिवार्य रूप से पहले से ही स्वीकृत उत्तर जैसा ही है? –

संबंधित मुद्दे