SQL क्वेरी में स्ट्रिंग्स -आमतौर पर- सिंगलकोट्स से घिरी होती हैं। उदा.
INSERT INTO tbl (html) VALUES ('html');
लेकिन अगर HTML स्ट्रिंग में एक सिंगलकोट भी है, तो यह SQL क्वेरी को तोड़ देगा:
INSERT INTO tbl (html) VALUES ('<form onsubmit="validate('foo', 'bar')">');
आप इसे सिंटैक्स हाइलाइटर में पहले ही देख चुके हैं, SQL मान foo
. से ठीक पहले समाप्त होता है और SQL दुभाषिया समझ नहीं पा रहा है कि उसके बाद क्या आता है। SQL सिंटैक्स त्रुटि!
लेकिन केवल इतना ही नहीं, यह दरवाजे चौड़े भी लगाता है SQL इंजेक्शन के लिए खुला (उदाहरण यहां )।
दौरान . आपको वास्तव में SQL को सैनिटाइज़ करना होगा SQL क्वेरी का निर्माण। यह कैसे करना है यह उस प्रोग्रामिंग भाषा पर निर्भर करता है जिसका उपयोग आप SQL को निष्पादित करने के लिए कर रहे हैं। यदि यह उदाहरण के लिए PHP है, तो आपको mysql_real_escape_string()
:
$sql = "INSERT INTO tbl (html) VALUES ('" . mysql_real_escape_string($html) . "')";
PHP में एक विकल्प तैयार स्टेटमेंट का उपयोग कर रहा है , यह आपके लिए SQL एस्केपिंग को हैंडल करेगा।
यदि आप जावा का उपयोग कर रहे हैं (JDBC
), तो आपको PreparedStatement
की आवश्यकता होगी
:
String sql = "INSERT INTO tbl (html) VALUES (?)";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, html);
अपडेट करें :यह पता चला है कि आप वास्तव में जावा का उपयोग कर रहे हैं। आपको कोड को इस प्रकार बदलना होगा:
String sql = "INSERT INTO website (URL, phishing, source_code, active) VALUES (?, ?, ?, ?)";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, URL);
preparedStatement.setString(2, phishingState);
preparedStatement.setString(3, sourceCode);
preparedStatement.setString(4, webSiteState);
preparedStatement.executeUpdate();
JDBC संसाधनों को ठीक से संभालना न भूलें। आपको यह लेख मिल सकता है कुछ अंतर्दृष्टि प्राप्त करने के लिए उपयोगी है कि बुनियादी जेडीबीसी सामान को उचित तरीके से कैसे करें। आशा है कि यह मदद करता है।