codeigniter
Säkra din webbapplikation
Sök…
Introduktion
Kom ihåg att CodeIgniter är en utvecklingsram. Det strävar inte efter att göra din applikation säker. Det ger dig bara verktygen för att göra det själv. Om du tittar på CI: s säkerhetssida är det ganska tydligt att de förväntar sig att utvecklaren ska förstå Application Security och bygga in den i deras applikation.
Om WebApp-säkerheten är relativt ny för dig, skulle jag börja med OWASP. Det kan vara fördelaktigt att titta på andra ramar som Zend eller Cake, som jag tror gör mer saker på förhand
Syntax
- $ freshdata = $ this-> security-> xss_clean ($ user_input_data);
parametrar
matris med användarinmatning | tom |
---|---|
infoga matris med användarinmatning i xss_filter($array of user input) | Tom |
XSS-förebyggande
XSS betyder skript på flera platser. CodeIgniter kommer med XSS-filtreringssäkerhet. Detta filter förhindrar skadlig JavaScript-kod eller annan kod som försöker kapa cookie och göra skadliga aktiviteter. För att filtrera data genom XSS-filter använder du metoden xss_clean () som visas nedan.
$data = $this->security->xss_clean($data);
Du bör bara använda den här funktionen när du skickar in data. Den andra Boolean-parametern som tillval kan också användas för att kontrollera bildfilen för XSS-attack. Detta är användbart för filuppladdningsfunktion. Om dess värde är sant, betyder bilden säker och inte på annat sätt.
SQL-injektionsförebyggande
SQL-injektion är en attack som görs på databasfrågan. I PHP använder vi funktionen mysql_real_escape_string () för att förhindra detta tillsammans med andra tekniker men CodeIgniter tillhandahåller inbyggda funktioner och bibliotek för att förhindra detta.
Vi kan förhindra SQL-injektion i CodeIgniter på följande tre sätt -
- Rymdfrågor
- Frågestyrning
- Aktiv postklass
Rymdfrågor
<?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()
lägger automatiskt till enstaka citat runt data och bestämmer datatypen så att den endast kan undkomma strängdata.
Frågestyrning
<?php
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
?>
I exemplet ovan kommer frågetecknet (?) Att ersättas av matrisen i den andra parametern för query()
. Den största fördelen med att bygga frågan på detta sätt är att värdena undviks automatiskt vilket ger säkra frågor. CodeIgniter-motorn gör det åt dig automatiskt, så du behöver inte komma ihåg det.
Aktiv postklass
<?php
$this->db->get_where('subscribers_tbl',array('status'=> active','email' => '[email protected]'));
?>
Med hjälp av aktiva poster genereras frågsyntax av varje databasadapter. Det tillåter också säkrare frågor, eftersom värdena flyr automatiskt.
Dölja PHP-fel
I produktionsmiljö vill vi ofta inte visa något felmeddelande till användarna. Det är bra om det är aktiverat i utvecklingsmiljön för felsökning. Dessa felmeddelanden kan innehålla viss information som vi av säkerhetsskäl inte bör visa till webbplatsanvändarna.
Det finns tre CodeIgniter-filer relaterade till fel. PHP-felrapporteringsnivå
Olika miljöer kräver olika nivåer av felrapportering. Som standard visar utvecklingen fel men testning och live döljer dem. Det finns en fil som heter index.php i rotkatalogen för CodeIgniter, som används för detta ändamål. Om vi passerar noll som argument till error_reporting () -funktionen kommer det att dölja alla fel.
CSRF-förebyggande
CSRF står för förfalskning på olika platser. Du kan förhindra denna attack genom att aktivera ett alternativ i applikationen / config / config.php-filen som visas nedan.
$config['csrf_protection'] = TRUE;
När du skapar ett formulär med form_open()
sätter den automatiskt in en CSRF-token i ett doldt fält. Du kan också lägga till CSRF-token manuellt med funktionen get_csrf_token_name()
och get_csrf_hash()
. Som deras namn antyder get_csrf_token_name()
funktionen get_csrf_token_name()
att returnera namnet på CSRF-token, medan get_csrf_hash()
kommer att returnera hash.
CSRF-token kan regenereras varje gång för inlämning eller så kan du också hålla det på samma sätt under CSRF-cookien. Att ställa in konfigurationsalternativet 'csrf_regenerate' kommer att tvinga regenerering av tokenet som visas nedan.
$config['csrf_regenerate'] = TRUE;
Du kan vitlista URL: er från CSRF-skydd genom att ställa in matchningar för dem i konfigurationsfältet med hjälp av nyckeln 'csrf_exclude_uris' som visas nedan. Du kan också använda vanliga uttryck.
$config['csrf_exclude_uris'] = array('api/person/add');
Ta bort missbruksdata från användarinmatningen
// 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-förebyggande av användarinmatning
Lita inte på någon användarinmatning. användaren matar in allt som <script>
-tagg eller någon JavaScript- alert();
så vi måste förhindra att all information inte körs i vår webbläsare. så vi måste använda xss-förhindrande metod för att begränsa våra säkra data till att förvaras i hackerhand och dessutom är det utvecklarens ansvar för användarens inputvalidering och löser fel genom att programmera.
så kolla att detta är ett exempel på förebyggande av xss i CodeIgniter.
$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
så efter att vi har lagt till xss_filtering har vi inga problem att köra någon missbrukskod som matas in av användaren. och CodeIgniter ersätter denna missbrukstagg med [removed]
nyckelord.