MySQL sql इंजेक्शन को कैसे रोकता है? एसक्यूएल इंजेक्शन सिद्धांत और रोकथाम

MySQLएसक्यूएल इंजेक्शन को कैसे रोकें? एसक्यूएल इंजेक्शन सिद्धांत और रोकथाम

MySQL और एसक्यूएल इंजेक्शन

यदि आप उपयोगकर्ता द्वारा वेब पेज के माध्यम से दर्ज किए गए डेटा को लेते हैं और इसे एक में डालते हैंMySQL डेटाबेस, तो SQL इंजेक्शन सुरक्षा समस्याएँ हो सकती हैं।

यह अध्याय आपको परिचय देगा कि SQL इंजेक्शन को कैसे रोकें और SQL में इंजेक्ट किए गए वर्णों को फ़िल्टर करने के लिए स्क्रिप्ट का उपयोग करें।

तथाकथित SQL इंजेक्शन डोमेन नाम या पेज अनुरोध की क्वेरी स्ट्रिंग सबमिट या इनपुट करने के लिए वेब फॉर्म में SQL कमांड डालकर दुर्भावनापूर्ण SQL कमांड निष्पादित करने के लिए सर्वर को धोखा देना है।

हमें उपयोगकर्ता इनपुट पर कभी भरोसा नहीं करना चाहिए, हमें यह मान लेना चाहिए कि उपयोगकर्ता इनपुट डेटा असुरक्षित है, और हम सभी को उपयोगकर्ता इनपुट डेटा को फ़िल्टर करने की आवश्यकता है।

निम्नलिखित उदाहरण में, दर्ज किया गया उपयोगकर्ता नाम अक्षरों, संख्याओं और अंडरस्कोर का संयोजन होना चाहिए, और उपयोगकर्ता नाम 8 से 20 वर्णों के बीच होना चाहिए:

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
   $result = mysqli_query($conn, "SELECT * FROM users 
                          WHERE username=$matches[0]");
}
 else 
{
   echo "username 输入异常";
}

आइए SQL स्थिति पर एक नज़र डालें जो तब होती है जब विशेष वर्ण फ़िल्टर नहीं किए जाते हैं:

// 设定$name 中插入了我们不需要的SQL语句
$name = "Qadir'; DELETE FROM users;";
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

उपरोक्त इंजेक्शन स्टेटमेंट में, हमने $name के वेरिएबल को फ़िल्टर नहीं किया। SQL स्टेटमेंट जिसकी हमें आवश्यकता नहीं है, $name में डाला गया है, जो उपयोगकर्ता तालिका के सभी डेटा को हटा देगा।

PHP में mysqli_query() को एकाधिक SQL कथन निष्पादित करने की अनुमति नहीं है, लेकिन SQLite और PostgreSQL में, एक ही समय में एकाधिक SQL कथन निष्पादित किए जा सकते हैं, इसलिए हमें इन उपयोगकर्ताओं के डेटा को सख्ती से सत्यापित करने की आवश्यकता है।

SQL इंजेक्शन को रोकने के लिए, हमें निम्नलिखित बिंदुओं पर ध्यान देने की आवश्यकता है:

  • 1. उपयोगकर्ता के इनपुट पर कभी भरोसा न करें।उपयोगकर्ता के इनपुट की जांच करें, आप नियमित अभिव्यक्ति का उपयोग कर सकते हैं, या लंबाई को सीमित कर सकते हैं; सिंगल कोट्स और डबल "-", आदि को रूपांतरित करें।
  • 2. गतिशील असेंबली एसक्यूएल का कभी भी उपयोग न करें, आप पैरामीटरयुक्त एसक्यूएल का उपयोग कर सकते हैं या डेटा क्वेरी और एक्सेस के लिए सीधे संग्रहीत प्रक्रियाओं का उपयोग कर सकते हैं।
  • 3. कभी भी व्यवस्थापक विशेषाधिकारों के साथ डेटाबेस कनेक्शन का उपयोग न करें, प्रत्येक एप्लिकेशन के लिए सीमित विशेषाधिकारों के साथ अलग डेटाबेस कनेक्शन का उपयोग करें।
  • 4. गोपनीय जानकारी को सीधे स्टोर न करें, पासवर्ड और संवेदनशील जानकारी को एन्क्रिप्ट या हैश आउट न करें।
  • 5. आवेदन की अपवाद जानकारी को यथासंभव कुछ संकेत देना चाहिए, और मूल त्रुटि जानकारी को लपेटने के लिए कस्टम त्रुटि जानकारी का उपयोग करना सबसे अच्छा है
  • 6. एसक्यूएल इंजेक्शन की पहचान विधि आम तौर पर सहायक को गोद लेती हैसॉफ्टवेयरया वेबसाइट प्लेटफ़ॉर्म का पता लगाने के लिए, सॉफ़्टवेयर आमतौर पर sql इंजेक्शन डिटेक्शन टूल jsky का उपयोग करता है, और वेबसाइट प्लेटफ़ॉर्म में Yisi वेबसाइट सुरक्षा प्लेटफ़ॉर्म डिटेक्शन टूल होता है। MDCSOFT स्कैन एट अल।MDCSOFT-IPS का उपयोग प्रभावी रूप से SQL इंजेक्शन, XSS हमलों आदि से बचाव कर सकता है।

एसक्यूएल इंजेक्शन रोकें

पर्ल और पीएचपी जैसी स्क्रिप्टिंग भाषाओं में आप एसक्यूएल इंजेक्शन को रोकने के लिए उपयोगकर्ता द्वारा दर्ज किए गए डेटा से बच सकते हैं।

PHP के लिए MySQL एक्सटेंशन विशेष इनपुट वर्णों से बचने के लिए mysqli_real_escape_string() फ़ंक्शन प्रदान करता है।

if (get_magic_quotes_gpc()) 
{
  $name = stripslashes($name);
}
$name = mysqli_real_escape_string($conn, $name);
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

लाइक स्टेटमेंट में इंजेक्शन

क्वेरी करते समय, यदि उपयोगकर्ता "_" और "%" के साथ मान दर्ज करता है, तो ऐसा होगा: उपयोगकर्ता मूल रूप से "abcd_" क्वेरी करना चाहता था, लेकिन क्वेरी परिणामों में "abcd_", "abcde", और "abcdf" शामिल हैं "आदि; समस्या तब भी होती है जब उपयोगकर्ता "30%" (नोट: तीस प्रतिशत) क्वेरी करना चाहता है।

एक PHP स्क्रिप्ट में हम उपरोक्त स्थिति को संभालने के लिए addcslashes() फ़ंक्शन का उपयोग कर सकते हैं, जैसा कि निम्न उदाहरण में है:

$sub = addcslashes(mysqli_real_escape_string($conn, "%something_"), "%_");
// $sub == \%something\_
 mysqli_query($conn, "SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

Addcslashes() फ़ंक्शन निर्दिष्ट वर्ण से पहले एक बैकस्लैश जोड़ता है।

सिंटैक्स प्रारूप:

addcslashes(string,characters)
参数描述
स्ट्रिंगआवश्यक।जाँच करने के लिए स्ट्रिंग निर्दिष्ट करता है।
अक्षरवैकल्पिक।Addcslashes() से प्रभावित वर्णों का वर्ण या श्रेणी निर्दिष्ट करता है।

होप चेन वेइलियांग ब्लॉग ( https://www.chenweiliang.com/ ) ने साझा किया "MySQL sql इंजेक्शन को कैसे रोकता है? sql इंजेक्शन सिद्धांत और रोकथाम", यह आपकी मदद करेगा।

इस लेख का लिंक साझा करने के लिए आपका स्वागत है:https://www.chenweiliang.com/cwl-500.html

नवीनतम अपडेट प्राप्त करने के लिए चेन वेइलियांग के ब्लॉग के टेलीग्राम चैनल में आपका स्वागत है!

🔔 चैनल शीर्ष निर्देशिका में मूल्यवान "चैटजीपीटी कंटेंट मार्केटिंग एआई टूल उपयोग गाइड" प्राप्त करने वाले पहले व्यक्ति बनें! 🌟
📚 इस गाइड में बहुत महत्व है, 🌟यह एक दुर्लभ अवसर है, इसे न चूकें! ⏰⌛💨
अच्छा लगे तो शेयर और लाइक करें!
आपका साझा करना और पसंद करना हमारी निरंतर प्रेरणा है!

 

发表 评论

आपकी ईमेल आईडी प्रकाशित नहीं की जाएगी। आवश्यक फ़ील्ड का उपयोग किया जाता है * लेबल

शीर्ष तक स्क्रॉल करें