MySQLsql इंजेक्शन कसरी रोक्न? SQL इंजेक्शन सिद्धान्त र रोकथाम
MySQL र SQL इंजेक्शन
यदि तपाइँ वेब पृष्ठ मार्फत प्रयोगकर्ता द्वारा प्रविष्ट गरिएको डाटा लिनुभयो र यसलाई a मा घुसाउनुहोस्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 इंजेक्शन रोक्न, हामीले निम्न बिन्दुहरूमा ध्यान दिन आवश्यक छ:
- १. प्रयोगकर्ताको इनपुटमा कहिल्यै विश्वास नगर्नुहोस्।प्रयोगकर्ताको इनपुट जाँच गर्नुहोस्, तपाइँ नियमित अभिव्यक्तिहरू प्रयोग गर्न सक्नुहुन्छ, वा लम्बाइ सीमित गर्न सक्नुहुन्छ; एकल उद्धरणहरू रूपान्तरण गर्नुहोस् र डबल "-", आदि।
- 2. डायनामिक एसेम्ब्ली sql कहिल्यै प्रयोग नगर्नुहोस्, तपाईं प्यारामिटराइज्ड sql प्रयोग गर्न सक्नुहुन्छ वा डाटा क्वेरी र पहुँचको लागि भण्डारण प्रक्रियाहरू सीधै प्रयोग गर्न सक्नुहुन्छ।
- 3. प्रशासक विशेषाधिकारहरूसँग डाटाबेस जडानहरू कहिल्यै प्रयोग नगर्नुहोस्, प्रत्येक अनुप्रयोगको लागि सीमित विशेषाधिकारहरूसँग छुट्टै डाटाबेस जडानहरू प्रयोग गर्नुहोस्।
- 4. गोप्य जानकारी सीधै भण्डार नगर्नुहोस्, पासवर्डहरू र संवेदनशील जानकारीहरू एन्क्रिप्ट वा ह्यास आउट नगर्नुहोस्।
- 5. अनुप्रयोगको अपवाद जानकारीले सकेसम्म थोरै सङ्केतहरू दिनु पर्छ, र मूल त्रुटि जानकारी लपेट्न अनुकूलन त्रुटि जानकारी प्रयोग गर्नु उत्तम हुन्छ।
- 6. sql इंजेक्शन को पत्ता लगाउने विधि सामान्यतया सहायक अपनाउँछ软件वा वेबसाइट प्लेटफर्म पत्ता लगाउनको लागि, सफ्टवेयरले सामान्यतया sql इंजेक्शन पत्ता लगाउने उपकरण jsky प्रयोग गर्दछ, र वेबसाइट प्लेटफर्ममा Yisi वेबसाइट सुरक्षा प्लेटफर्म पत्ता लगाउने उपकरण छ। MDCSOFT SCAN et al।MDCSOFT-IPS को प्रयोगले SQL इंजेक्शन, XSS आक्रमणहरू, आदि विरुद्ध प्रभावकारी रूपमा रक्षा गर्न सक्छ।
SQL इंजेक्शन रोक्नुहोस्
पर्ल र PHP जस्ता स्क्रिप्टिङ भाषाहरूमा तपाइँ SQL इंजेक्शन रोक्न प्रयोगकर्ताद्वारा प्रविष्ट गरिएको डाटाबाट बच्न सक्नुहुन्छ।
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" समावेश छन्। " आदि; समस्या पनि तब हुन्छ जब प्रयोगकर्ताले "३०%" (नोट: तीस प्रतिशत) सोध्न चाहन्छ।
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)
प्यारामिटर | वर्णन |
---|---|
string | आवश्यक छ।जाँच गर्न स्ट्रिङ निर्दिष्ट गर्दछ। |
वर्ण | ऐच्छिक।addcslashes() द्वारा प्रभावित क्यारेक्टरहरूको क्यारेक्टर वा दायरा निर्दिष्ट गर्दछ। |
आशा चेन वेइलियाङ ब्लग ( https://www.chenweiliang.com/ ) साझा गर्नुभयो "कसरी MySQL ले sql इंजेक्शन रोक्न सक्छ? sql इंजेक्शन सिद्धान्त र रोकथाम", यसले तपाईंलाई मद्दत गर्नेछ।
यस लेखको लिङ्क साझा गर्न स्वागत छ:https://www.chenweiliang.com/cwl-500.html
नवीनतम अपडेटहरू प्राप्त गर्न चेन वेइलियाङको ब्लगको टेलिग्राम च्यानलमा स्वागत छ!
📚 यो गाइडले ठूलो मूल्य समावेश गर्दछ, 🌟यो दुर्लभ अवसर हो, यसलाई नछुटाउनुहोस्! ⏰⌛💨
मन परे लाइक र सेयर गर्नुहोस !
तपाइँको साझा र लाइक हाम्रो निरन्तर प्रेरणा हो!