"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > PHP सुरक्षित कोडिंग: कोड को ढीला न होने दें

PHP सुरक्षित कोडिंग: कोड को ढीला न होने दें

2024-08-20 को प्रकाशित
ब्राउज़ करें:911

मैं पिछले दिनों एक दोस्त के साथ अनौपचारिक बातचीत कर रहा था जो एक सफल स्टार्टअप पर तकनीकी नेतृत्वकर्ता है, और जब हम महिलाओं के वाटर पोलो के ओलंपिक फाइनल को देख रहे थे, तो हमने एक PHP विफलता के बारे में बात करना शुरू कर दिया जो मुझे जंगल में मिली थी ?. वह एक टेक लीड है और मैं एक मिड-डेव हूं, मैं उम्मीद कर रहा था कि वह अपने रोजमर्रा के काम में पहले ही इस विफलता से निपट लेगा, लेकिन ठीक है... जितना आश्चर्यजनक लगता है उतना उसने नहीं किया।
मैं जिस "असफल" के बारे में बात कर रहा हूं, और आप शायद इसका अनुमान पहले ही लगा चुके होंगे, वह और कुछ नहीं बल्कि PHP की ढीली तुलना है। अब, निष्पक्ष होने के लिए, मैं वास्तव में इसे इतना विफल नहीं कहूंगा, बल्कि एक सुविधा है, लेकिन इसका उपयोग इतना खतरनाक हो सकता है कि, इस अर्थ में, यह एक असफल है! आइए अपना काम शुरू करें!

PHP Secure Coding: Don

विषयसूची

  • PHP ढीली तुलना
  • संवेदनशील परिदृश्य
    • असुरक्षित लॉगिन सिस्टम
    • एक मोड़ के साथ असुरक्षित प्राधिकरण
  • ढीले तुलना बग को कम करना
  • निष्कर्ष
  • प्यार दिखाएं @Sudorealm

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

यदि आप सोच रहे हैं कि कोई हैकर हमारे डेटा के साथ कैसे छेड़छाड़ कर सकता है, तो मेरे पास आपके लिए दो उत्तर हैं:

  1. कर्ल के साथ कस्टम अनुरोध।
  2. बर्पसुइट

आगे बढ़ते रहना।

एक मोड़ के साथ असुरक्षित प्राधिकरण

यहां मैं 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 पर मेरे निजी ब्लॉग में पा सकते हैं।

यदि आपको मेरी लेखन शैली और मेरी सामग्री पसंद है तो फॉलो बटन दबाने में संकोच न करें, और जादुई चीजें घटित होंगी! ??

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/athanstan/php-secure-coding-dont-let-the-code-get-loose-26ja?1 यदि कोई उल्लंघन है, तो कृपया स्टडी_गोलंग@163.com पर संपर्क करें इसे हटाने के लिए
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3