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

एसक्यूएल इंजेक्शन सुरक्षा

यह नहीं है एसक्यूएल इंजेक्शन क्या है। जब भी आप ऐसे पैरामीटर का उपयोग करते हैं जिन्हें आपकी SQL क्वेरी में सैनिटाइज नहीं किया गया है, तो आप अपने डेटाबेस को SQL इंजेक्शन के लिए खुला छोड़ देते हैं, जो जरूरी नहीं कि डेटा को नष्ट करने का लक्ष्य हो। यह डेटा चोरी करने या अनधिकृत पहुंच हासिल करने के लिए भी हो सकता है।

एक बहुत ही प्रतिबंधित खाते पर विचार करें जहां वह केवल SELECT कर सकता है . आप प्रमाणीकरण के लिए एक प्रश्न लिखते हैं:

$sql = "SELECT COUNT(*) AS count
          FROM users 
         WHERE user_id='{$_POST['user']}' AND pass='{$_POST['password'}'";

// check if returns a count of 1, if yes, log in

सामान्य इनपुट के साथ, आप क्वेरी के इस तरह दिखने की उम्मीद करते हैं:

SELECT COUNT(*) AS count
  FROM users 
 WHERE user_id = 'username' AND pass='********'

यदि उपयोगकर्ता नाम और पास दोनों मेल खाते हैं तो 1 को गिनती के रूप में वापस करना चाहिए। अब एक हमलावर व्यवस्थापक के रूप में लॉग इन करने का प्रयास करता है। चूंकि आपने अपने इनपुट को सैनिटाइज नहीं किया है, वे $_POST['user'] भेजते हैं के रूप में:admin'; -- . पूरी क्वेरी बन जाती है:

SELECT COUNT(*) AS count
  FROM users 
 WHERE user_id = 'admin'; -- AND pass='********'

-- . के बाद सब कुछ एक टिप्पणी है, इसलिए यह दूसरी शर्त पर ध्यान नहीं देता है और 1 की परवाह किए बिना लौटाता है। आप वहां जाएं, आपने अभी-अभी एक दुर्भावनापूर्ण उपयोगकर्ता व्यवस्थापक पहुंच प्रदान की है। इस तरह कुछ वास्तविक हमले किए जाते हैं। आप एक कम विशेषाधिकार प्राप्त खाते से शुरू करते हैं और सुरक्षा में छेद के माध्यम से आप अधिक विशेषाधिकारों तक पहुंच प्राप्त करने का प्रयास करते हैं।

लंबी कहानी छोटी, प्रतिबंधित विशेषाधिकारों के साथ एक एप्लिकेशन-व्यापी खाता होना (उदाहरण:कोई DROP . नहीं , ALTER आदि) अच्छा है। कभी भी किसी को या किसी एप्लिकेशन को जरूरत से ज्यादा विशेषाधिकार न दें। लेकिन 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. एक स्ट्रिंग को एक MySQL दशमलव प्रकार में कनवर्ट करना

  2. यूनियन (Mysql) पर ORDER BY लागू करें

  3. COLUMN SPLIT के साथ MySQL GROUP_CONCAT

  4. डिफ़ॉल्ट CURDATE () के साथ MySQL DATE फ़ील्ड। दिनांक समय नहीं

  5. कॉन्फ़िगरेशन फ़ाइल बनाने का सबसे अच्छा तरीका (config.php) php