2011-01-11 13 views
5

मैं एक वेब पार्ट डिज़ाइन कर रहा हूं जहां उपयोगकर्ता खोज वाक्यांश दर्ज कर सकते हैं जिसके लिए MOSS खोज अनुक्रमणिका मांगी गई है। मैं खोज के लिए FullTextSqlQuery कक्षा का उपयोग करता हूं।शेयरपॉइंट एंटरप्राइज़ एसक्यूएल खोज वाक्यविन्यास में एसक्यूएल इंजेक्शन

जब मैं अपना select कथन बनाता हूं, तो मुझे स्पष्ट रूप से इसमें उपयोगकर्ता के इनपुट को शामिल करने के लिए concatenation का उपयोग करना होगा। (?)

SELECT title, author from portal..scope() 
WHERE ("SCOPE" = 'TheDocuments') 
AND CONTAINS(MYPROPERTY, 'TheValueThatuserSpecified') 

तो, सवाल है, मैं कैसे एसक्यूएल उपयोगकर्ता इनपुट से इंजेक्शन से बचने के है: अंतिम बयान कुछ इस तरह होना चाहिए? क्या इसके लिए कुछ विशिष्ट उपयोगिता कार्य है? PHP/mysql प्रोजेक्ट्स में मैं mysql_real_escape_string का उपयोग करूंगा। शेयरपॉइंट नेमस्पेस में कुछ भी समान है?

उत्तर

2

मैं उपयोगकर्ता इनपुट एन्कोड करने के लिए तो मैं अपने ही विधि बनाए गए किसी भी समारोह नहीं मिला है:

protected override string EncodeUrlParameter(string paramValue) 
{ 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < paramValue.Length; i++) 
    { 
     char c = paramValue[i]; 
     if (c == '*' || c == '%' || c == '[' || c == ']' || c == '_') 
      sb.Append("[").Append(c).Append("]"); 
     else if (c == '\'') 
      sb.Append("''"); 
     else 
      sb.Append(c); 
    } 
    return sb.ToString(); 
} 

यह मुख्य रूप से की तरह कीवर्ड का उपयोग फ़िल्टर्ड मापदंडों के लिए प्रयोग किया जाता है (the documentation page has a note about this) । सबसे बड़ी चीज जिस पर मैंने ठोकर खाई थी जब लोगों ने अपने प्रश्नों में एस्ट्रोफ़ेस शामिल करने की कोशिश की थी।

2

FullTextSQLQuery वर्ग एक "पूरा टेक्स्ट एसक्यूएल" क्वेरी जो सच एसक्यूएल नहीं है लेता है। "पूर्ण पाठ एसक्यूएल" पार्स किया गया है और एसक्यूएल सर्वर डेटाबेस में तालिका के विरुद्ध क्वेरी के लिए नियमित एसक्यूएल क्वेरी में परिवर्तित किया गया है और बाहरी अनुक्रमणिका फ़ाइल के विरुद्ध क्वेरी करने के लिए। "पूर्ण पाठ वर्ग" के माध्यम से एसक्यूएल इंजेक्शन करने के लिए कोई रास्ता नहीं है, यह सत्यापन पास नहीं करेगा। "कॉलम नाम" आप "पूर्ण टेक्स्ट एसक्यूएल" में उपयोग करते हैं, " गुण" प्रबंधित होना चाहिए जो खोज व्यवस्थापन में स्थापित हैं, वे तालिका पर वास्तविक कॉलम नामों को इंगित नहीं करते हैं।

http://www.sharepointdev.net/sharepoint--search/is-fulltextsqlquery-protected-against-sql-injection-35184.shtml

+1

सच है, लेकिन इस तरह उपयोगकर्ता किसी भी तरह से खोज वाक्यांश जैसे '') दर्ज कर सकता है और इसमें शामिल है (ANOTHERPROPERTY, 'Anothervalue) या (SCOPE =' AnotherScope'। यह एक वैध खोज क्वेरी प्रस्तुत करता है, लेकिन काफी अलग तरीके से। मुद्दा यह है - आपको एस्ट्रोफ़ेस, उद्धरण इत्यादि से बचने का ख्याल रखना है। – naivists

+0

अनुबंध भविष्यवाणी केवल प्रबंधित गुणों के विरुद्ध काम करेगी जिन्हें पूर्णTextQueriable के रूप में सक्षम किया गया है। इसके अलावा, पुनर्प्राप्त करने योग्य ध्वज। यह ध्वज किसी प्रबंधित संपत्ति के मान को वापस आने से रोकता है चयन कथन में कॉलम। –

+1

इसके अलावा, खोज परिणाम सुरक्षा छंटनी की जाती हैं, इसलिए यदि आप चलाने के लिए अपनी इंजेक्शन वाली क्वेरी प्राप्त करने का प्रबंधन करते हैं तो आपको केवल वही परिणाम मिलेगा जिनके लिए आपके पास सामान्य रूप से पहुंच है। –

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