2010-04-07 17 views
9

के साथ एसक्यूएल इंजेक्शन को कैसे रोकूं मैं कोल्डफ्यूज़न की स्थिति में SQL इंजेक्शन को कैसे रोकूं? मैं भाषा/ढांचे के लिए काफी नया हूँ।मैं कोल्डफ्यूजन

यहां मेरा उदाहरण प्रश्न है।

<cfquery name="rsRecord" datasource="DataSource"> 
    SELECT * FROM Table 
    WHERE id = #url.id# 
</cfquery> 

मैं एक जोखिम के रूप url.id में गुजर देखते हैं।

उत्तर

18

अपने आईडी के लिए एक <cfqueryparam> टैग का प्रयोग करें:
http://www.adobe.com/livedocs/coldfusion/6.1/htmldocs/tags-b20.htm

<cfquery name="rsRecord" datasource="DataSource"> 
    SELECT * FROM Table 
    WHERE id = 
    <cfqueryparam value = "#url.id#" 
     CFSQLType = "CF_SQL_INTEGER"> 
</cfquery> 
+0

@ जोएल Coehoorn - क्या आप एक उदाहरण प्रदान कर सकते हैं? धन्यवाद! –

4
  • एक पैरामिट्रीकृत संग्रहीत प्रक्रिया
  • cfqueryparam
  • त्रुटि व्यक्तिगत क्वेरी के आसपास से निपटने का उपयोग
  • <cferror> के माध्यम से साइट के लिए से निपटने त्रुटि
  • तर्क यह है कि कि एक निश्चित समय
  • में एक विशिष्ट आईपी से आते हैं सुनिश्चित डेटाबेस उपयोगकर्ता खाते केवल विशिष्ट कार्यों यह चाहिए
0

cfqueryparam का उपयोग रोकने एसक्यूएल इंजेक्शन अच्छा है के लिए है। लेकिन, यदि आप cfqueryparam का उपयोग करना चाहते हैं तो आप cququery टैग में cachewithin का उपयोग नहीं कर सकते हैं। मेरी एक और सलाह है कि

इस स्थिति को अपने पृष्ठ के शीर्ष पर रखें।

< CFIF IsDefined ("आईडी") न कि IsNumeric (आईडी) > < cfabort showerror = "अमान्य क्वेरी स्ट्रिंग" > </CFIF >

आपकी क्वेरी टैग में, बस इस तरह का उपयोग करें:

कहां आईडी = #Val (आईडी) #

भी देखें, कैसे रोकने के लिए: http://ppshein.wordpress.com/2008/08/28/block-ip-in-coldfusion/

+0

डेटाबेस सुरक्षा को मैन्युअल रूप से कार्यान्वित करने के प्रयास से मैन्युअल रूप से कैशिंग को कार्यान्वित करने के लिए बेहतर है। –

+0

कम से कम टाइपिंग को लागू करने के लिए cfparam का उपयोग करना बेहतर है, लेकिन मैं सहमत हूं, सुरक्षा को खराब करने से कैशिंग को पेंच करना लगभग हमेशा बेहतर होता है – Grey

3

cfqueryparam के अलावा आप प्रत्येक चर इसे करने के लिए पारित कर दिया के लिए एसक्यूएल युक्त पेज के शीर्ष पर cfparam उपयोग कर सकते हैं। यह दस्तावेज़ीकरण में भी मदद करता है।

उदा।

<cfparam name="url.id" type="integer"> 

या अधिक उन्नत:

<cfparam name="url.id" type="regex" pattern="\d" default=""> 

के बाद से रेगुलर एक्सप्रेशन पैटर्न अनुमति दी जाती है, इन अत्यंत शक्तिशाली हो सकता है:

<cfparam name="form.place" type="regex" pattern="[A-Z0-9]{1,6}|" default=""> 
     <!--- Upper case Alpa or Numeric, 1-6 characters or empty string ---> 

इसके अलावा, आप अपने आवेदन पत्र में एक cferror का उपयोग सुनिश्चित करें। आपकी क्वेरी तालिका को उजागर करने से रोकने के लिए cfm या application.cfc और कॉलम नाम

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