यह बहुत सारी बुरी दुनिया है, क्योंकि आपका प्रश्न यह है कि आपके आवेदन में संभवतः SQL इंजेक्शन छेद है।
आपको पैरामीटराइज्ड स्टेटमेंट का उपयोग करना चाहिए। जावा के लिए, PreparedStatement
प्लेसहोल्डर्स के साथ उपयोग करें । आप कहते हैं कि आप parameterised बयानों का उपयोग नहीं करना चाहते हैं, लेकिन आप की व्याख्या नहीं करते क्यों , और स्पष्ट रूप से यह एक बहुत अच्छा कारण उन्हें इस्तेमाल करने के लिए नहीं है क्योंकि वे सबसे सरल, सबसे सुरक्षित समस्या आप कोशिश कर रहे हैं ठीक करने के लिए जिस तरह से कर रहे हैं हो गया है समाधान करना।
जावा में SQL इंजेक्शन को रोकना देखें । बॉबी के अगले शिकार मत बनो ।
PgJDBC में स्ट्रिंग उद्धरण और भागने के लिए कोई सार्वजनिक कार्य नहीं है। यह आंशिक रूप से है क्योंकि यह एक अच्छा विचार की तरह लग सकता है।
वहाँ रहे हैं बिल्ट-इन कार्य के हवाले से quote_literal
और quote_ident
PostgreSQL में, लेकिन वे के लिए कर रहे हैं PL/PgSQL
कि उपयोग कार्यों EXECUTE
। इन दिनों quote_literal
में ज्यादातर इसका पालन किया जाता है EXECUTE ... USING
, जो कि मानकीकृत संस्करण है , क्योंकि यह अधिक सुरक्षित और आसान है । आप उन्हें यहाँ उस उद्देश्य के लिए उपयोग नहीं कर सकते हैं, क्योंकि वे सर्वर-साइड फ़ंक्शन हैं।
सोचिए अगर आपको ');DROP SCHEMA public;--
दुर्भावनापूर्ण उपयोगकर्ता से मान मिले तो क्या होगा । आप उत्पादन करेंगे:
insert into test values (1,'');DROP SCHEMA public;--');
जो दो बयानों को तोड़ता है और एक टिप्पणी जिसे अनदेखा किया जाता है:
insert into test values (1,'');
DROP SCHEMA public;
--');
वूप्स, वहाँ अपने डेटाबेस जाता है।