200 likes | 396 Views
PHP „ CodeIgniter “ karkaso saugumas. Pareng ė: Modestas Kažinauskas. Turinys. Kas yra „ CodeIgniter “ Karkaso privalumai Galimybės Saugumas Klausimai. Kas yra „ CodeIgniter “?. Pirmoji viešai prieinama versija – 2006 metais Naujausia versija 2.1.4
E N D
PHP „CodeIgniter“ karkasosaugumas Parengė: Modestas Kažinauskas
Turinys • Kas yra „CodeIgniter“ • Karkaso privalumai • Galimybės • Saugumas • Klausimai
Kas yra „CodeIgniter“? • Pirmoji viešai prieinama versija – 2006 metais • Naujausia versija 2.1.4 • Atvirojo kodo Interneto aplikacijų karkasas • Skirtas PHP aplikacijų kūrimui • Paremtas ModelViewController dizaino šablonu • Palaiko ir prižiūri „EllisLab“
Karkaso privalumai • Nedidelis • Labai spartus • Veikia ant daugelio svetainių talpinimo serverių • Reikia labai mažai konfigūravimo • Nereikia naudoti komandinės eilutės • Nereikia laikytis griežtų kodavimo standartų • Nėra būtina mokėti šablonų kalbos • Aiški dokumentacija
„CodeIgniter“ galimybės • Greitas aplikacijų kūrimas • Padeda tvarkyti kasdieniškus dalykus: • Užklausų apdorojimas • Puslapiavimas • Validacija • Ir kt.
Saugumas • Duomenų bazės pavojingų užklausų vengimas („ActiveRecord“) • URL adresų apsauga • Draudžiama: register_globals • Klaidų ataskaitos • XSS filtravimas • CSRF apsauga • Automatinis GET/POST/COOKIE valymas • Formų validacija
ActiveRecord • Modifikuota architektūrinio dizaino šablono versija • Leidžia atlikti CREATE/READ/UPDATE/DELETE operacijas su duomenų baze • Galima naudoti su be kuria realiacine duomenų baze • Leidžia sujungti metodus (chaining, PHP5+)
ActiveRecord pavyzdys $query = $this->db->from(‘naudotojai’) ->where(‘dept’, ‘DIT’) ->order_by(‘pavarde asc’); foreach ($query->result() as $row) { echo $row->vardas.’ ‘.$row->pavardė; }
URL adresų apsauga • Dėl pavojingo duomenų pateikimo aplikacijai yra blokuojami visi pavojingi simboliai išskyrus: • Skaičiai ir raidės • Tildė: „~“ • Taškas: „.“ • Dvitaškis: „:“ • Apatinis brūkšnys: „_“ • Paprastas brūkšnys: „-“
Register_globals išjungimas • Su „register_globals“ $_POST[`vartotojo_vardas`] galima pasiekti kaip $vartotojo_vardas • „CodeIgniter“ karkasas automatiškai išjungią šia PHP funkciją • Pavojingo atvejo pavyzdys: • page1.php -> $_SESSION[`user`]=`modestas`; • page2.php -> if(!empty($user)){//priėjimas prie autentifikuoto naudojo funkcijų} • Pavojinga užklausa: page2.php?user=`modestas`
Klaidų ataskaitos • Pavojinga rodyti produkcinėje aplinkoje dėl jautrios informacijos atskleidimo • Galima įjungti arba išjungti konfigūracijoje pakeičiant reikšmę „error_reporting“ (0 arba 1) • Taip pat keičiant ENVIROMENT konstantą esančią index.php faile. Production – išjungia, development – ijungia.
XSS filtravimas • Galima naudoti kaip funkciją: • $data = $this->security->xss_clean($data); • Galima tikrinti ar paveikslėlis yra saugus: • if ($this->security->xss_clean($file, TRUE) === FALSE){// Nepavykęs XSS testas} • Galima įjungti automatinį filtravimą POST arba COOKIE duomenims: • „application/config/config.php“$config['global_xss_filtering'] = TRUE;
Failo vardo apsauga • Pavojinga kai pateikiamas toks failo vardas:„file/in/some/approved/folder.txt“ • $this->security->sanitize_filename() naudojimas: • $filename = $this->security->sanitize_filename($this->input->post('filename'));
CSRF apsauga • Įjungiama „config.php“ faile:$config['csrf_protection'] = TRUE; • Naudojant funkciją form_open() automatiškai yra įdedamas paslėptas laukelis su kodu.
Formų validacija • Atliekama kontroleryje • Kai kurie tikrinimai egzistuoja, bet galima nustatyti ir savo
Formų validacijos pavyzdys $this->load->library('form_validation'); $this->form_validation->set_rules('vardotojo_vardas', 'Username', 'required'); $this->form_validation->set_rules('slaptazodis', 'Password', 'required'); $this->form_validation->set_rules(‘slaptazodis2', 'Password Confirmation', 'required'); $this->form_validation->set_rules('el_pastas', 'Email', 'required|valid_email'); if ($this->form_validation->run() == FALSE) { $this->load->view('myform'); } else { $this->load->view('formsuccess'); }
Automatinis GET/POST/COOKIE valymas • Filtravimas automatiškai įjungiamas paleidžiant kontrolerį • Jei išjungtas „allow_get_array“ tai sunaikinamas globalus GET masyvas • Išfiltruoja visus GET/POST/COOKIE masyvų raktus leidžiant tik skaičius ir raides, bei kelis kitus simbolius • Išvalo XSS atakas • Padaro naujos eilutės simbolius į „\n“ (jei windows „\r\n“)
Šaltiniai • http://ellislab.com/codeigniter/user-guide/ • http://ellislab.com/codeigniter/user-guide/libraries/input.html • http://ellislab.com/codeigniter/user-guide/general/security.html