2011-12-30 10 views
6

मुझे जावास्क्रिप्ट का उपयोग करके मान को संशोधित करने की आवश्यकता है, ताकि इसे SQL सम्मिलित क्वेरी के हिस्से के रूप में रखा जा सके।RegExp का उपयोग करके मैं बैकस्लैश को डबल बैकस्लैश से कैसे बदल सकता हूं?

वर्तमान में मेरे पास एकल कोट 'चरित्र को संभालने के लिए निम्न कोड है।

value = value.replace(/'/g, "\\'"); 

यह कोड किसी समस्या के बिना काम करता है। अब मैंने देखा है कि अकेले बैकस्लैश त्रुटियों का कारण बन रहे हैं।

मैं उन स्टैंड अकेले बैकस्लाश को कैसे हटा सकता हूं?

+4

आपको उपयोगकर्ता से ऐसे डेटा पर भरोसा नहीं करना चाहिए जहां इसे किसी प्रश्न में सीधे उपयोग किया जाता है।डेटा से बचने के लिए सर्वर-साइड किया जाना चाहिए, अन्यथा एक बड़ा जोखिम है कि आपको SQL-इंजेक्शन का उपयोग करके हैक किया जाएगा, क्योंकि जावास्क्रिप्ट को बाईपास करना आसान है। –

+2

मैं इस तथ्य से बहुत डर रहा हूं कि आप जावास्क्रिप्ट के साथ SQL कथन बना रहे हैं। क्या आपके पास वास्तव में जावास्क्रिप्ट में लिखा गया एक एसक्यूएल लाइब्रेरी है (मैंने ऐसा नहीं सोचा था), या आप निष्पादन के लिए वेब सर्वर पर SQL कथन भेज रहे हैं? यदि यह उत्तरार्द्ध है, तो आपके पास * प्रमुख * सुरक्षा छेद है! _ आप _must_ सर्वर पर SQL कथन बनाते हैं। –

+4

मुझे उम्मीद है कि यह किसी भी तरह से सर्वर पक्ष जावास्क्रिप्ट है, जैसे नोडजेस। –

उत्तर

16

अब मैंने देखा है कि स्टैंड-अलोन बैकस्लाश त्रुटियां पैदा कर रहे हैं।

जिस स्ट्रिंग पर आप चल रहे हैं उसमें बैकस्लाश का कोई भी प्रभाव ' वर्णों को बदलने पर कोई प्रभाव नहीं पड़ेगा। अपने लक्ष्य बैकस्लैश पात्रों को बदलने के लिए है, तो इस का उपयोग करें:

value = value.replace(/\\/g, "whatever"); 

... जो "जो कुछ भी" के साथ स्ट्रिंग में सभी बैकस्लैश की जगह लेगा। ध्यान दें कि मुझे केवल एक के बजाय दो बैकस्लैश लिखना पड़ा है। ऐसा इसलिए है क्योंकि regular expression literal में, बैकस्लैश का उपयोग विभिन्न विशेष पात्रों और चरित्र वर्गों को पेश करने के लिए किया जाता है, और इसे   — नियमित रूप से अभिव्यक्ति शाब्दिक (एक स्ट्रिंग में) में दो बैकस्लैश के साथ एक स्ट्रिंग में एक वास्तविक बैकस्लैश का प्रतिनिधित्व करने के रूप में भी उपयोग किया जाता है। ।

दो बैकस्लैश में एक भी बैकस्लैश बदलने के लिए, का उपयोग करें:

value = value.replace(/\\/g, "\\\\"); 

ध्यान दें कि, फिर से, एक शाब्दिक बैकस्लैश प्रतिस्थापन स्ट्रिंग में प्राप्त करने के लिए, हम दो   — चार में जिसके परिणामस्वरूप में से प्रत्येक से बचने के लिए है प्रतिस्थापन स्ट्रिंग में कुल मिलाकर।

मुझे जावास्क्रिप्ट का उपयोग करके मूल्य को संशोधित करने की आवश्यकता है, ताकि इसे SQL सम्मिलित क्वेरी के हिस्से के रूप में रखा जा सके।

आप इसे हाथ से नहीं करना चाहते हैं। किसी भी प्रौद्योगिकी आप डेटाबेस प्रश्नों और इस तरह के (JDBC, ODBC, आदि) करने की अनुमति देता है कि प्रदान करेगा के कुछ फार्म तैयार या पैरामिट्रीकृत बयान (link) है, जो आप के लिए मुद्दों से बचने के इन प्रकार से संबंधित है। इसे स्वयं करने से वास्तव में आपके सॉफ़्टवेयर में सुरक्षा छेद छोड़ने की गारंटी दी जाती है जिसका शोषण किया जा सकता है। आप उस टीम के काम का उपयोग करना चाहते हैं जिसे इसके बारे में सोचना पड़ता है, और परिणामस्वरूप कोड को समय-समय पर अद्यतन करता है क्योंकि मुद्दों को अकेले उड़ने के बजाय प्रकाश में आता है। इसके अलावा, यदि आपकी जावास्क्रिप्ट क्लाइंट पर चल रही है (जैसा कि अधिकांश है, लेकिन किसी भी तरह से सभी   — मैं हर समय जावास्क्रिप्ट सर्वर-साइड का उपयोग करता हूं), तो कुछ भी नहीं स्ट्रिंग से बचने के लिए आप इसे सुरक्षित बना सकते हैं, क्योंकि क्लाइंट सर्वर को अनुरोधों को धोखा दिया जा सकता है, पूरी तरह से अपने क्लाइंट-साइड कोड को छोड़कर।

+0

जैसे कुछ मुझे डबल बैकस्लैश के साथ प्रतिस्थापित करने की आवश्यकता है। क्या मैं सिर्फ value = value.replace (/ \\/g, "\\") का उपयोग कर सकता हूं; ? – user1052933

3

आपको किसी प्रकार की डेटाबेस लाइब्रेरी द्वारा प्रदान किए गए एक एस्केप फ़ंक्शन का उपयोग करना चाहिए, अपनी खुद की इच्छा को रोल करने से केवल परेशानी हो सकती है।

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