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

सी # (एसक्यूएल इंजेक्शन अटैक) में गतिशील क्वेरी बनाना

इस तरह से एक क्वेरी बनाना एसक्यूएल इंजेक्शन हमलों के लिए कमजोर बना देता है जब तक कि आप मैन्युअल रूप से अपने इनपुट से बच नहीं गए हैं (आईई ने डेटाबेस इंजन विशिष्ट एस्केप अनुक्रमों का उपयोग करके क्वेरी की संरचना को बदलने के लिए 'प्रोजेक्ट आईडी' के मूल्य के लिए असंभव बना दिया है)। हालांकि, ऐसा करने का अनुशंसित तरीका पैरामीटरयुक्त प्रश्नों (कभी-कभी "तैयार विवरण" कहा जाता है) का उपयोग कर रहा है। पैरामीटरयुक्त प्रश्नों के साथ, आप केवल क्वेरी की संरचना को परिभाषित करते हैं और फिर इनपुट मानों को पैरामीटर के रूप में अलग से प्रदान करते हैं, जिससे आपकी क्वेरी की संरचना को SQL इंजेक्शन के माध्यम से कभी भी परिवर्तित होने से रोका जा सकता है।

यहाँ आपका उदाहरण है, पैरामीटरकरण का उपयोग करने के लिए बदला गया:

public DataSet GetProject(string projectID)
{
   DataSet dataTable = new DataSet(); 
   DataAccess dataAccess = new DataAccess();
   OracleCommand commandOb = new OracleCommand();
   strQuery = @"select projectName, managerName
                  from project
                  where projectID = :ProjectID"

   cmd.CommandText = strQuery;
   cmd.Parameters.AddWithValue("ProjectID", projectID);
   dataTable = dataAccess.ExecuteDataAdapter(commandOb);

   return dataTable;
}

क्वेरी में पैरामीटर ':ProjectID' को 'AddWithValue' पद्धति में दिए गए मान से बदल दिया जाएगा। कोई फर्क नहीं पड़ता कि 'प्रोजेक्ट आईडी' चर में क्या मूल्य है, इसका मूल्यांकन हमेशा WHERE क्लॉज के हिस्से के रूप में किया जाएगा। जबकि, पहले, ['; के समान मान; प्रोजेक्ट से हटाएं;--] आपकी क्वेरी को निम्नानुसार पढ़ने के लिए बदलकर अवांछित प्रभाव डाल सकता है:

select projectName, managerName
  from project
  where projectID = ''; DELETE FROM project;--'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. लोब प्रतिधारण

  2. जावा के Varargs के Oracle समकक्ष

  3. WSO2 API प्रबंधक:बाहरी डेटाबेस का उपयोग करते समय chpasswd.sh काम नहीं करता है

  4. पता लगाएँ कि क्या Oracle में किसी मान में कम से कम एक संख्यात्मक अंक है

  5. कॉलम के औसत की गणना कैसे करें और फिर इसे ऑरैकल में एक चुनिंदा क्वेरी में शामिल करें?