2014-10-13 4 views
12

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

a'bcd

String userString="a'bcd"; 
String insertTableSQL = "INSERT INTO myTable " 
          + "(insertColumn) " 
          + "VALUES(" 
           +"'"+userString+"'" 
           +")"; 

statement.executeUpdate(insertTableSQL); 
+2

आप पैरामीटर का उपयोग करने की जरूरत है। – SLaks

+2

https://www.owasp.org/index.php/Preventing_SQL_Injection_in_Java – Donal

उत्तर

28

आप नीचे दिए गए दोनों में से किसी कर सकते हैं:

  1. तैयार स्टेटमेंट का उपयोग करें। (अनुशंसित)

    String userString="a'bcd"; 
    String myStatement = " INSERT INTO MYTABLE (INSERTCOLUMN) VALUES (?)"; 
    PreparedStatement statement= con.prepareStatement (myStatement); 
    statement.setString(1,userString); 
    statement.executeUpdate(); 
    
  2. भागने

    एकल उद्धरण।

    एसक्यूएल में, सिंगल कोट्स डबल सिंगल कोट्स का उपयोग करके बच निकलेगा। ' ->''

    String userString="a'bcd"; 
    String changedUserString = userString.replace("'","''"); 
         //changedUserString = a''bcd 
    String insertTableSQL = "INSERT INTO myTable (insertColumn) VALUES(" 
             +" '"+changedUserString +"')"; 
    
3

आप जावा StringEscapeUtils द्वारा प्रदान StringEscapeUtils इस का उपयोग का उपयोग कर सकते हैं कि आप अपने उद्देश्य के लिए HTML, XML, विधि escapeXXX के लिए mysql etc.look से पात्रों बच सकते हैं। संदर्भ के लिए - When i need to escape Html string? उदाहरण के लिए:

String str = FileUtils.readFileToString(new File("input.txt")); 
     String results = StringEscapeUtils.escapeHtml(str); 
     System.out.println(results); 

इनपुट:

<sometext> 
Here is some "Text" that I'd like to be "escaped" for HTML 
& here is some Swedish: Tack. Vars?god. 
</sometext> 

उत्पादन:

एक देशी Android विधि का प्रयोग करें बिल्कुल के लिए बनाया गया:

&lt;sometext&gt; 
Here is some &quot;Text&quot; that I'd like to be &quot;escaped&quot; for HTML 
&amp; here is some Swedish: Tack. Vars&aring;god. 
&lt;/sometext&gt; 
+3

स्ट्रिंगएस्केप में बचने के लिए प्रलेखन के लिए दस्तावेज का उपयोग करें: "वर्तमान में, यह विधि केवल सिंगल-कोट्स को दोगुनी सिंगल-कोट्स में बदल देती है" – potapuff

+3

स्ट्रिंगएस्केपयूटिल .escapeSql [अवमूल्यित] है (https : //commons.apache.org/proper/commons-lang/article3_0.html)। – chancyWu

+1

यह दृष्टिकोण केवल तभी काम करता है जब आप बाद में HTML आउटपुट के रूप में इनपुट का उपयोग करना चाहते हैं। बहिष्कार के बारे में, कॉमन्स-लैंग का v3.6 अभी भी है और org.apache.commons.text के साथ ठीक काम करता है। [स्ट्रिंगएस्केप उपयोग] (https://commons.apache.org/proper/commons-text/javadocs/api-release /org/apache/commons/text/StringEscapeUtils.html)। – Alfabravo

0

यहाँ एक और विकल्प नहीं है यह पु rpose:

DatabaseUtils.sqlEscapeString(String) 

यहाँ यह के लिए दस्तावेज़ ऑनलाइन है:

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


String userString="a'bcd"; 
String insertTableSQL = "INSERT INTO myTable " 
          + "(insertColumn) " 
          + "VALUES(" 
           +"'"+DatabaseUtils.sqlEscapeString(userString)+"'" 
           +")"; 

statement.executeUpdate(insertTableSQL); 
संबंधित मुद्दे