क्या कोई फ़ंक्शन या लाइब्रेरी है जिसका उपयोग उपयोगकर्ता इनपुट को साफ करने के लिए किया जा सकता है। उदाहरण के लिए यदि उपयोगकर्ता baily's
नामक एक टेक्स्ट इनपुट करता है तो मुझे इसे mysql क्वेरी पर भेजने से पहले '
से बचना चाहिए। इसी प्रकार मैं शून्य वर्णों को फ़िल्टर करने में सक्षम होना चाहिए और \ n, \ t, \ r आदि .. PHP में की तरह हमारे पास mysql_real_escape_string($input)
है ऐसा करने के लिए जावा में कुछ भी है?जावा में स्ट्रिंग की सफाई
उत्तर
जावा में, आप आमतौर पर इस हाथ से नहीं करते हैं।
इसके बजाय आप एक PreparedStatement
का उपयोग करें और स्पष्ट setString()
या setObject()
विधियों के माध्यम से अपने SQL विवरण के लिए किसी भी बहस में पास भेज देंगे।
इस तरह JDBC ड्राइवर यह संभाल लेंगे (या तो आवश्यक एस्केपिंग करके या SQL बयान अलग तर्क के रूप में, डीबी के आधार पर भेज कर)।
उदाहरण के लिए, अपने कोड है कि दिखाई दे सकता है (prepareStatement()
उपयोग करते हुए):
Connection c = ...; // get Connection from somehwere
PreparedStatement stmt = c.prepareStatement("SELECT * FROM BOOKS WHERE TITLE = ?");
stmt.setString(1, userInput);
ResultSet result = stmt.executeQuery();
आपको PreparedStatement का उपयोग करना चाहिए और setString
फ़ंक्शन का उपयोग करके $input
के मान सेट करना चाहिए।
PreparedStatement
उपयोग करने का कारण एक प्रत्येक डेटाबेस अलग अलग चीजें बचने के लिए आवश्यकता हो सकती है है। यह जटिलता डेटाबेस विक्रेता द्वारा प्रदत्त PreparedStatement
के ठोस कार्यान्वयन में छिपी हुई है।
आप इस के लिए प्लेसहोल्डर वाला तैयार बयान का उपयोग करें। देखें http://download.oracle.com/javase/tutorial/jdbc/basics/prepared.html
वैसे ही जैसे आप PHP में कार्य करना चाहिए: http://php.net/manual/en/pdo.prepared-statements.php
मैं कोई अपराध मतलब जब मैं कहना है कि केवल बेवकूफ प्लेसहोल्डर के साथ तैयार बयान के पक्ष में mysql_real_escape_string
का प्रयोग करेंगे।
आप उपयोग से बचने प्रणाली आप के लिए स्ट्रिंग का उपयोग करना चाहते हैं के लिए विशिष्ट है। यदि आप MySQL का उपयोग करते हैं, तो आपको जावास्क्रिप्ट के एक टुकड़े में स्ट्रिंग का उपयोग करना चाहते हैं, तो आपको अलग-अलग भागना होगा।
तो अपने प्रश्न का उत्तर देने के लिए, हमें यह जानना होगा कि आप अपनी स्ट्रिंग से कैसे बचना चाहते हैं। संभावना है कि आप किसी डेटाबेस संदर्भ में इसका उपयोग करने से पहले स्ट्रिंग से बचने की आवश्यकता नहीं है। उदाहरण के लिए, यदि आप prepared queries का उपयोग करते हैं, तो आपको अपने मूल्यों से बचने की आवश्यकता नहीं है।
लघु जवाब, नहीं, "क्लीन" की बहुत सटीक परिभाषा देखने के लिए छोड़कर। फिलहाल आपको एक भाषा विशिष्ट समाधान का उपयोग करना होगा - एसक्यूएल के लिए, बस एक तैयार कथन का उपयोग करें।
लंबा उत्तर, स्वचालित स्ट्रिंग सैनिटाइजर्स पर हाल ही में काम किया गया है जो पता लगाता है कि सादा पाठ सामग्री को सुरक्षित रूप से & अन्य भाषाओं में सामग्री में कैसे शामिल किया जाए।
स्वत: प्रासंगिक ऑटो escapers, Soy, Go तरह टेम्पलेट भाषाओं में एचटीएमएल के लिए मौजूद हैं jQuery, cTemplates, ClearSilver और उम्मीद है कि जल्द ही अन्य लोगों का एक संस्करण।
इस पर सामान्यीकरण करने पर शोध हो रहा है ताकि इसे आसानी से अन्य भाषाओं तक बढ़ाया जा सके। एक विचार जिस पर मैं काम कर रहा हूं वह एक एनोटेटेड व्याकरण ले रहा है जो एसक्यूएल जैसी लक्षित भाषा का वर्णन करता है और यह पता लगाता है कि छेद के लिए क्या बचने की आवश्यकता है जो उपयोगकर्ता डेटा से भरा जा सकता है।
JSONValue := JSONNullLiteral
| JSONBooleanLiteral
| JSONObject
| JSONArray
| JSONString
| JSONNumber ;
JSONObject := @KeyValueMap ([{] JSONMemberList? [}]) ;
JSONMemberList := JSONMember ([,] JSONMemberList)? ;
JSONMember := @Key JSONString [:] @Value JSONValue ;
JSONNullLiteral := @ValueNull "null" ;
JSONBooleanLiteral := @ValueFalse "false" | @ValueTrue "true" ;
JSONArray := @List("[" (JSONValue ([,] JSONValue)*)? "]") ;
JSONString := @String ([\"] JSONStringCharacters? [\"]) ;
JSONNumber := @Number (Sign? (Mantissa Exponent? | Hex)) ;
JSONStringCharacters := JSONStringCharacter JSONStringCharacters? ;
JSONStringCharacter := @Char ([^\"\\\x00-\x1f])
| JSONEscapeSequence ;
JSONEscapeSequence := "\\" @Char [/\\\"]
| @Char{[\x08]} "\\b"
| @Char{[\x0c]} "\\f"
| @Char{[\x0a]} "\\n"
| @Char{[\x0d]} "\\r"
| @Char{[\x09]} "\\t"
| @Char ("\\u" @Scalar (hex hex hex hex)) ;
Mantissa := (Integer ([.] Fraction?) | [.] Fraction) ;
Exponent := [Ee] Sign? decimal+ ;
Integer := [0] | [1-9] [0=9]* ;
Fraction := [0-9]+ ;
Hex := [0] [Xx] hex+ ;
Sign := [+\-] ;
हम नीचे की तरह एक राज्य मशीन का निर्माण कर सकते हैं::
नीचे जो एनोटेशन शामिल की तरह एक व्याकरण है कि दिखाने के लिए भाषा भीतर सबस्ट्रिंग करने के लिए डेटा नक्शे की संरचना को देखते हुए
जो घटनाओं के अनुक्रमों को परिवर्तित करता है (प्रारंभ, start_object, start_key, वर्ण 'x', ...) उन निर्देशों में जो वर्णों को एक बफर पर एन्कोड करते हैं।
उस राज्य मशीन से हम एन्कोडर्स के लिए कुशल कोड उत्पन्न करने के लिए उपयोग करने के लिए निर्देशों के सामान्य निशान भी उत्पन्न कर सकते हैं, और उम्मीद है कि संदर्भ विश्लेषण एल्गोरिदम जो यह पता लगाते हैं कि कौन से एन्कोडर्स लागू होते हैं।
इस काम करता है तो वह स्वत: & सुरक्षित रूप से एसक्यूएल, एचटीएमएल, आदि जैसी भाषाओं में सामग्री रचना भाषा परिभाषाओं को तोड़ मरोड़ के साथ करने के लिए तंत्र की सीमाओं को खोजने के लिए execute_query
अनुमति देने के लिए यह आसान सामान्य प्रयोजन प्रोग्रामिंग भाषाओं में शामिल करना होगा, execute_query("SELECT * FROM Table WHERE ID=$ID")
में प्रोग्रामर-निर्दिष्ट-सामग्री और इंजेक्शन सामग्री के बीच और इंजेक्शन सामग्री से स्वचालित रूप से बचने के लिए उन लोगों का उपयोग करें, हम उस मुहावरे को प्रोग्रामर के इरादे से ही काम कर सकते हैं।
- 1. जावा स्टैक निशान से शोर की सफाई
- 2. टेक्स्ट सफाई और प्रतिस्थापन: जावा
- 3. आरटीएफ पाठ की सफाई
- 4. $ _POST चर की सफाई
- 5. जावा सर्वलेट - सत्र सफाई (HttpServletRequest)
- 6. अजगर स्ट्रिंग सफाई + हेरफेर (उच्चारण वर्ण)
- 7. एक Mercurial रिपोजिटरी की सफाई
- 8. Emacs: पूर्ववत पेड़ की सफाई
- 9. xpath विशेषताओं की सफाई/sanitizing
- 10. अजवाइन की सफाई कार्यपत्र तालिका
- 11. Magento Modman symlinks की सफाई
- 12. ReSharper की TestResults फ़ाइलों की सफाई?
- 13. ग्रहण में परियोजना की सफाई के लिए शॉर्टकट?
- 14. दोहराए सेटअप और सफाई जावा (JDBC) कोड
- 15. वेब नियंत्रक को मेरे नियंत्रकों की सफाई
- 16. सीएसएस रंगों की सफाई के लिए उपकरण
- 17. gen_server स्थिति की सफाई को संभालना
- 18. पायथन [एलएक्सएमएल] - एचटीएमएल टैग की सफाई
- 19. पुरानी रिमोट गिट शाखाओं की सफाई
- 20. FizzBuzz सफाई
- 21. जेटी की सफाई - 'अनावश्यक' चीजों को हटाकर
- 22. जावा में स्ट्रिंग की प्रदर्शन चौड़ाई की गणना करें
- 23. पृष्ठभूमि में एप्लिकेशन की मौत होने पर सफाई कैसे करें?
- 24. ग्रहण में एक परियोजना और regeneratig वर्ग फ़ाइलों की सफाई
- 25. जावा में स्ट्रिंग पुल
- 26. जावा स्ट्रिंग में सुपरस्क्रिप्ट
- 27. जावा में स्लाइस स्ट्रिंग
- 28. स्ट्रिंग ... जावा में पैरामीटर
- 29. पॉइंटर्स की एक एसटीएल सूची/वेक्टर की सफाई
- 30. जावा में स्ट्रिंग तुलना और स्ट्रिंग इंटर्निंग
यदि आप एक ओआरएम परत (जो जावा में सामान्य प्रथा है) का उपयोग करते हैं या यहां तक कि केवल नामित या समेकित पैरामीटर वाले स्टेटमेंट्स तो SQL पैरामीटर से बचने के लिए स्वचालित रूप से आपके लिए किया जाएगा। जब तक आप अपने प्रश्नों को बनाने के लिए तारों को मैन्युअल रूप से संयोजित नहीं कर रहे हैं, तो आपको सुरक्षित होना चाहिए। – aroth
** यह भी देखें: ** ['जेडीबीसी - एसक्यूएल क्वेरी के साथ उपयोगकर्ता द्वारा आपूर्ति किए गए पैरामीटर से कैसे बचें]] (http://stackoverflow.com/questions/4954002/jdbc-how-to-escape-user-supplied- मापदंडों-साथ एक एसक्यूएल क्वेरी) –