codeigniter
अपने वेब एप्लिकेशन को सुरक्षित रखना
खोज…
परिचय
याद रखें CodeIgniter एक डेवलपमेंट फ्रेमवर्क है। यह आपको आवेदन सुरक्षित बनाने का प्रयास नहीं करता है। यह केवल आपको इसे स्वयं करने के लिए उपकरण देता है। यदि आप CI के सुरक्षा पृष्ठ को देखते हैं, तो यह बहुत स्पष्ट है कि वे डेवलपर से एप्लीकेशन सिक्योरिटी को समझने और इसे अपने एप्लिकेशन में बनाने की अपेक्षा कर रहे हैं।
यदि WebApp सुरक्षा आपके लिए अपेक्षाकृत नई है, तो मैं OWASP के साथ शुरू करूंगा। यह देखने के लिए फायदेमंद हो सकता है कि Zend या Cake जैसी अन्य रूपरेखाओं को देखें, जो मुझे लगता है कि अधिक अग्रिम बातें करते हैं
वाक्य - विन्यास
- $ freshdata = $ this-> सुरक्षा-> xss_clean ($ user_input_data);
पैरामीटर
उपयोगकर्ता इनपुट की सरणी | रिक्त |
---|---|
xss_filter($array of user input) में उपयोगकर्ता इनपुट का xss_filter($array of user input) | रिक्त |
एक्सएसएस रोकथाम
XSS का मतलब क्रॉस-साइट स्क्रिप्टिंग है। CodeIgniter XSS फ़िल्टरिंग सुरक्षा के साथ आता है। यह फ़िल्टर किसी भी दुर्भावनापूर्ण जावास्क्रिप्ट कोड या किसी भी अन्य कोड को रोक देगा जो कुकी को अपहृत करने और दुर्भावनापूर्ण गतिविधियों को करने का प्रयास करता है। XSS फ़िल्टर के माध्यम से डेटा को फ़िल्टर करने के लिए, नीचे दिखाए गए अनुसार xss_clean () विधि का उपयोग करें।
$data = $this->security->xss_clean($data);
आपको इस फ़ंक्शन का उपयोग केवल तभी करना चाहिए जब आप डेटा सबमिट कर रहे हों। वैकल्पिक दूसरा बुलियन पैरामीटर का उपयोग XSS हमले के लिए छवि फ़ाइल की जांच के लिए भी किया जा सकता है। यह फ़ाइल अपलोड सुविधा के लिए उपयोगी है। यदि इसका मान सत्य है, तो इसका मतलब है कि छवि सुरक्षित है और अन्यथा नहीं।
एसक्यूएल इंजेक्शन रोकथाम
SQL इंजेक्शन डेटाबेस क्वेरी पर किया गया एक हमला है। PHP में, हम अन्य तकनीकों के साथ इसे रोकने के लिए mysql_real_escape_string () फ़ंक्शन का उपयोग करते हैं लेकिन इसे रोकने के लिए CodeIgniter इनबिल्ट फ़ंक्शंस और लाइब्रेरी प्रदान करता है।
हम निम्नलिखित तीन तरीकों से CodeIgniter में SQL इंजेक्शन को रोक सकते हैं -
- भागने की क्वेरी
- क्वेरी बाइंडिंग
- सक्रिय रिकॉर्ड क्लास
भागने की क्वेरी
<?php
$username = $this->input->post('username');
$query = 'SELECT * FROM subscribers_tbl WHERE user_name = '.
$this->db->escape($email);
$this->db->query($query);
?>
$this->db->escape()
फ़ंक्शन स्वचालित रूप से डेटा के चारों ओर एकल उद्धरण जोड़ता है और डेटा प्रकार को निर्धारित करता है ताकि यह स्ट्रिंग डेटा से बच सके।
क्वेरी बाइंडिंग
<?php
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
?>
उपरोक्त उदाहरण में, प्रश्न चिह्न (?) को query()
फ़ंक्शन के दूसरे पैरामीटर में सरणी द्वारा प्रतिस्थापित किया जाएगा। इस तरह क्वेरी बनाने का मुख्य लाभ यह है कि वे मान स्वतः ही बच जाते हैं जो सुरक्षित प्रश्न उत्पन्न करते हैं। CodeIgniter इंजन आपके लिए यह स्वचालित रूप से करता है, इसलिए आपको इसे याद रखने की आवश्यकता नहीं है।
सक्रिय रिकॉर्ड क्लास
<?php
$this->db->get_where('subscribers_tbl',array('status'=> active','email' => '[email protected]'));
?>
सक्रिय रिकॉर्ड का उपयोग करते हुए, प्रत्येक डेटाबेस एडेप्टर द्वारा क्वेरी सिंटैक्स उत्पन्न किया जाता है। यह सुरक्षित प्रश्नों को भी अनुमति देता है, क्योंकि मान स्वचालित रूप से बच जाते हैं।
PHP त्रुटियाँ छिपा रहा है
उत्पादन परिवेश में, हम अक्सर उपयोगकर्ताओं को कोई त्रुटि संदेश प्रदर्शित नहीं करना चाहते हैं। डिबगिंग उद्देश्यों के लिए इसे विकास के माहौल में सक्षम किया जाए तो अच्छा है। इन त्रुटि संदेशों में कुछ जानकारी हो सकती है, जो हमें सुरक्षा कारणों से साइट उपयोगकर्ताओं को नहीं दिखानी चाहिए।
त्रुटियों से संबंधित तीन CodeIgniter फाइलें हैं। PHP त्रुटि रिपोर्टिंग स्तर
विभिन्न वातावरण में त्रुटि रिपोर्टिंग के विभिन्न स्तरों की आवश्यकता होती है। डिफ़ॉल्ट रूप से, विकास त्रुटियों को दिखाएगा लेकिन परीक्षण और लाइव उन्हें छिपाएंगे। CodeIgniter की रूट डायरेक्टरी में index.php नाम की एक फाइल होती है, जिसका इस्तेमाल इस काम के लिए किया जाता है। यदि हम त्रुटि_reporting () फ़ंक्शन के तर्क के रूप में शून्य पास करते हैं तो वह सभी त्रुटियों को छिपा देगा।
सीएसआरएफ रोकथाम
CSRF का उद्देश्य क्रॉस-साइट अनुरोध जालसाजी है। आप इस हमले को एप्लिकेशन / config / config.php फ़ाइल में एक विकल्प को सक्षम करके रोक सकते हैं जैसा कि नीचे दिखाया गया है।
$config['csrf_protection'] = TRUE;
जब आप form_open()
फ़ंक्शन का उपयोग करके एक फॉर्म बनाते हैं, तो यह स्वचालित रूप से एक छिपे हुए क्षेत्र में एक CSRF टोकन सम्मिलित करेगा। आप get_csrf_token_name()
और get_csrf_hash()
फ़ंक्शन का उपयोग करके मैन्युअल रूप से CSRF टोकन जोड़ सकते हैं। जैसा कि उनके नाम सुझाते हैं, get_csrf_token_name()
फ़ंक्शन CSRF टोकन का नाम get_csrf_hash()
, जबकि get_csrf_hash()
हैश लौटाएगा।
CSRF टोकन को हर बार जमा करने के लिए पुनर्जीवित किया जा सकता है या आप इसे CSRF कुकी के जीवन भर भी रख सकते हैं। कॉन्फ़िगरेशन विकल्प 'csrf_regenerate' सेट करने से टोकन के पुनर्जनन को दिखाया जाएगा जैसा कि नीचे दिखाया गया है।
$config['csrf_regenerate'] = TRUE;
आप नीचे दिखाए गए अनुसार कुंजी 'csrf_exclude_uris' का उपयोग करके कॉन्फ़िगरेशन सरणी में उनके लिए मिलान सेट करके CSRF सुरक्षा से URL को श्वेतसूची में बदल सकते हैं। आप नियमित अभिव्यक्तियों का भी उपयोग कर सकते हैं।
$config['csrf_exclude_uris'] = array('api/person/add');
उपयोगकर्ता इनपुट से दुरुपयोग डेटा निकालें
// XSS Filtering
$data = array(
'name'=> '<script>Abuse Data</script>'
);
$data = $this->security->xss_clean($data); // Clean Data
// Escaping Queries
<?php $username = $this->input->post('username'); $query = 'SELECT * FROM subscribers_tbl WHERE user_name = '. $this->db->escape($email); $this->db->query($query); ?>
उपयोगकर्ता इनपुट पर XSS की रोकथाम
किसी भी उपयोगकर्ता इनपुट पर भरोसा मत करो। उपयोगकर्ता इनपुट सब कुछ <script>
टैग या किसी भी जावास्क्रिप्ट alert();
इसलिए हमें यह रोकना होगा कि यह सारा डेटा हमारे ब्राउज़र में नहीं चलेगा। इसलिए हमें अपने सुरक्षित डेटा को हैकर के हाथ में रखने के लिए xss की रोकथाम विधि का उपयोग करना होगा और साथ ही यह उपयोगकर्ता के इनपुट सत्यापन के लिए डेवलपर की जिम्मेदारी है और प्रोग्राम द्वारा त्रुटि को हल करना है।
इसलिए, यह जांचें कि यह CodeIgniter में xss की रोकथाम का एक उदाहरण है।
$data = array(
'name' => "<script>alert('abc')</script>",
'email' => "[email protected]"
);
var_dump($data);
// Print array without xss cleaning/xss filtering
array(2) { ["name"]=> string(29) "" ["email"]=> string(19) "[email protected]" } // Result with alert
// now print data after xss filtering
$data = $this->security->xss_clean($data);
var_dump($data);
//Print array without xss cleaning/xss filtering
array(2) { ["name"]=> string(38) "[removed]alert('abc')[removed]" ["email"]=> string(19) "[email protected]" } // Result Without alert
इसलिए, जोड़ा गया xss_filtering के बाद हमारे पास कोई भी दुरुपयोग कोड चलाने के लिए कोई समस्या नहीं है जो उपयोगकर्ता द्वारा इनपुट करता है। और CodeIgniter इस दुरुपयोग टैग को [removed]
कीवर्ड से बदल देता है।