मैं पिछले दिनों एक दोस्त के साथ अनौपचारिक बातचीत कर रहा था जो एक सफल स्टार्टअप पर तकनीकी नेतृत्वकर्ता है, और जब हम महिलाओं के वाटर पोलो के ओलंपिक फाइनल को देख रहे थे, तो हमने एक PHP विफलता के बारे में बात करना शुरू कर दिया जो मुझे जंगल में मिली थी ?. वह एक टेक लीड है और मैं एक मिड-डेव हूं, मैं उम्मीद कर रहा था कि वह अपने रोजमर्रा के काम में पहले ही इस विफलता से निपट लेगा, लेकिन ठीक है... जितना आश्चर्यजनक लगता है उतना उसने नहीं किया।
मैं जिस "असफल" के बारे में बात कर रहा हूं, और आप शायद इसका अनुमान पहले ही लगा चुके होंगे, वह और कुछ नहीं बल्कि PHP की ढीली तुलना है। अब, निष्पक्ष होने के लिए, मैं वास्तव में इसे इतना विफल नहीं कहूंगा, बल्कि एक सुविधा है, लेकिन इसका उपयोग इतना खतरनाक हो सकता है कि, इस अर्थ में, यह एक असफल है! आइए अपना काम शुरू करें!
PHP में ढीली तुलना तब होती है जब आप == ऑपरेटर का उपयोग करके दो मानों की तुलना करते हैं, जो तुलना किए जा रहे चर के डेटा प्रकारों की जांच नहीं करता है। PHP मानों की तुलना करने से पहले उन्हें एक सामान्य प्रकार में बदलने का प्रयास करेगा।
if ('string' == true){ echo 'Weedle I choose you'; } else{ echo 'Charizard I choose you'; }
मानो या न मानो, हम यहां युद्ध में 3-स्तरीय वीडल भेजने वाले हैं, जबकि हमारा चरज़ार्ड अप्रयुक्त है। क्यों? ठीक है, उपरोक्त उदाहरण में, PHP स्ट्रिंग 'स्ट्रिंग' को true से तुलना करने से पहले इसे true में बदल देती है, जिससे वास्तविक तुलना हो जाती है? यह व्यवहार, हालांकि कभी-कभी उपयोगी होता है, अगर ठीक से समझा और नियंत्रित न किया जाए तो खतरनाक हो सकता है।
अधिक जानकारी के लिए PHP डॉक्स से इस ढीली तुलना तालिका की जाँच करें
पहली नजर में यह उतना नहीं लग सकता है, लेकिन मुझ पर विश्वास करें, एक प्रशिक्षित डेवलपर की नजर में यह अप्रत्याशित चाल उनकी हड्डियों में सिहरन पैदा कर सकती है और उन्हें उत्पादन कोड रीफैक्टरिंग की होड़ में भेज सकती है।
लेख के इस भाग में, मैं कुछ कोड ब्लॉक देने का प्रयास करूंगा जो जंगल में पाए जाने पर आपको एक सुंदर बग बाउंटी इनाम दे सकते हैं, इसके अलावा यदि आपको अपने कोडबेस के समान कुछ भी मिलता है... इसे बदल दें ?
नीचे दिए गए स्निपेट में आप एक बहुत ही बुनियादी लॉगिन सिस्टम तर्क देखते हैं।
$username = $_POST['username']; $password = $_POST['password']; if ($username == 'admin' && $password == '12345') { // Grant access }
मान लें कि एक चालाक हैकर भेजे गए डेटा के साथ छेड़छाड़ करता है और उन्हें बनाता है: $_POST['username'] = true और $_POST['password'] = true जिसके परिणामस्वरूप होगा:
$username = $_POST['username']; $password = $_POST['password']; if (true == 'admin' && true == '12345') { // Grant access } # Now that hacker has been granted access to our App... Good for him, not for us
यदि आप सोच रहे हैं कि कोई हैकर हमारे डेटा के साथ कैसे छेड़छाड़ कर सकता है, तो मेरे पास आपके लिए दो उत्तर हैं:
आगे बढ़ते रहना।
यहां मैं PHP के साथ एक समस्या दिखाता हूं जो आपको चौंका सकती है।
$user_role = $_POST['user_role']; // Example: 'admin', 'editor', 'viewer' // Authorization check using a switch statement switch ($user_role) { case 'crazyDifficultAdminRoleNooneWouldEverGuess': // Admin privileges echo "Access granted: Super Admin level"; break; case 'editor': // Editor privileges echo "Access granted: Editor level"; break; case 'viewer': // Viewer privileges echo "Access granted: Viewer level"; break; default: // No access echo "Access denied: Invalid role"; break; }
यह कोड पहले से ही डेटा से छेड़छाड़ के प्रति संवेदनशील है क्योंकि हैकर्स भूमिकाओं का अनुमान लगा सकते हैं और प्राधिकरण के विभिन्न स्तरों तक पहुंचने के लिए उन्हें बदल सकते हैं।
हालाँकि, हम थोड़ा सुरक्षित महसूस कर सकते हैं, क्योंकि वे कभी भी हमारी सुपर एडमिन भूमिका के नाम का अनुमान नहीं लगा पाएंगे।
लेकिन क्या होगा अगर उन्हें बिल्कुल भी अनुमान लगाने की ज़रूरत नहीं है?☠️
क्या आप जानते हैं कि स्विच केस ढीली तुलना का उपयोग करता है? हा! अब आप चौंक गए होंगे!
इसका मतलब यह है कि यदि हैकर $_POST['user_role'] = true जोड़ता है तो वे हमारे स्विच स्टेटमेंट में हमारे पहले केस तक पहुंच प्राप्त करेंगे, चाहे मूल्य कोई भी हो। क्या यह नीचे का दर्द नहीं है? दस्तावेज़ पढ़ें.
आपके PHP अनुप्रयोगों की सुरक्षा और विश्वसनीयता सुनिश्चित करने के लिए ढीले तुलना बग को कम करना महत्वपूर्ण है। PHP संस्करण 8.0 में सख्त तुलना === और मिलान अभिव्यक्ति का उपयोग, इस प्रक्रिया में एक महत्वपूर्ण भूमिका निभाता है। ढीले तुलना ऑपरेटर == के विपरीत, जो PHP के प्रकार की बाजीगरी के कारण अप्रत्याशित और संभावित रूप से खतरनाक परिणाम दे सकता है, सख्त तुलना यह सुनिश्चित करती है कि मूल्य और चर के प्रकार दोनों की जाँच की जाती है। यह अनपेक्षित प्रकार की ज़बरदस्ती जैसी कमजोरियों को समाप्त करता है, जिसका उपयोग सुरक्षा जांच को बायपास करने के लिए किया जा सकता है।
यहां मिलान अभिव्यक्ति का उपयोग करके असुरक्षित प्राधिकरण बग का समाधान दिया गया है:
$user_role = $_POST['role']; $response = match ($user_role) { 'crazyDifficultAdminRoleNooneWouldEverGuess' => "Access granted: Super Admin level", 'editor' => "Access granted: Editor level", 'viewer' => "Access granted: Viewer level", default => "Access denied: Invalid role", }; echo $response; # This outputs: 'Access denied: Invalid role' when role is set to true
क्या आप PHP में ढीली तुलना और टाइप बाजीगरी के खतरों के बारे में जानते हैं? यदि आपने नहीं किया, तो अब आप करें। इस सरल लेख को दस्तावेज़ीकरण को हमेशा पढ़ने और प्रोग्रामिंग करते समय आपके द्वारा उपयोग की जाने वाली हर चीज़ की ठोस समझ विकसित करने के लिए एक अनुस्मारक के रूप में कार्य करने दें। जब आप जो कुछ भी करते हैं उसमें सर्वश्रेष्ठ बनने का प्रयास करते समय जिज्ञासा महत्वपूर्ण होती है!
=== के सख्त अनुशासन और मिलान की तीव्र परिशुद्धता को अपनाकर, आप अपने PHP कोड को कसकर बांध कर रख सकते हैं, यह सुनिश्चित करते हुए कि यह ठीक उसी तरह व्यवहार करता है जैसा आप उम्मीद करते हैं। याद रखें, अभी थोड़ी सी सख्ती आपको बाद में होने वाले कई सिरदर्द से बचा सकती है। इसे एक चंचल संकेत मानें कि चाहे आप अपनी कोडिंग यात्रा पर कहीं भी हों, सीखने के लिए हमेशा कुछ नया होता है। तो, आँखें खुली रखें, जिज्ञासु बने रहें, और उन ढीली तुलनाओं को नेट पर न जाने दें! ?
आप मेरे बारे में अधिक जानकारी sudorealm.com पर मेरे निजी ब्लॉग में पा सकते हैं।
यदि आपको मेरी लेखन शैली और मेरी सामग्री पसंद है तो फॉलो बटन दबाने में संकोच न करें, और जादुई चीजें घटित होंगी! ??
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3