पीएल/पीजीएसक्यूएल में एसक्यूएल प्रश्नों की योजना तैयार बयानों की तरह की जाती है। जब तक आप केवल मानों पास करते हैं जैसा आप करते हैं, SQL इंजेक्शन आमतौर पर असंभव होता है . विवरण:
डायनेमिक SQL का उपयोग EXECUTE
. के साथ करें और वास्तव में SQL इंजेक्शन को प्रदर्शित करने के लिए उचित पैरामीटर हैंडलिंग के बिना।
पसंद करें (इस तरह नहीं करने के लिए!):
CREATE OR REPLACE FUNCTION login_v(em varchar, passwd varchar)
RETURNS SETOF users AS
$func$
BEGIN
RETURN QUERY EXECUTE
'SELECT *
FROM users
WHERE email = $1
AND encrypted_password = crypt(''' || passwd || ''', encrypted_password)'
USING em;
END
$func$ LANGUAGE plpgsql;
पहला चर em
USING
. के साथ ठीक से पारित किया गया है खंड मान . के रूप में और इस प्रकार SQL इंजेक्शन के लिए दुरुपयोग नहीं किया जा सकता है।
लेकिन दूसरा वेरिएबल passwd
ठीक से बचने के बिना अनुचित रूप से संयोजित किया गया है। इस प्रकार, उपयोगकर्ता इनपुट को SQL कोड में परिवर्तित किया जा सकता है। एसक्यूएल इंजेक्शन।
कभी भी इसका इस्तेमाल न करें! सिवाय यह दिखाने के कि इसे कैसे नहीं करना है।
क्लाइंट में SQL स्ट्रिंग्स को अनुचित रूप से संयोजित करते समय इसी तरह की शरारत संभव है।