PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PL/pgSQL में SQL इंजेक्शन प्रदर्शित करें

पीएल/पीजीएसक्यूएल में एसक्यूएल प्रश्नों की योजना तैयार बयानों की तरह की जाती है। जब तक आप केवल मानों पास करते हैं जैसा आप करते हैं, 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 स्ट्रिंग्स को अनुचित रूप से संयोजित करते समय इसी तरह की शरारत संभव है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. UNION, EXCEPT, या INTERSECT का उपयोग करते समय PostgreSQL में 'ERROR:  कॉलम "colname" मौजूद नहीं है' ठीक करें

  2. अन्य जॉइन टेबल कॉलम के आधार पर किसी फ़ील्ड के योग की गणना करना

  3. PostgreSQL में डेटाबेस का आकार प्राप्त करने के 2 तरीके

  4. Postgresql मान सेट करने के लिए ट्रिगर डालें

  5. qdateEdit से उपयोगकर्ता इनपुट कैसे प्राप्त करें और इसे पोस्टग्रेज में डेटाबेस से चुनें