codeigniter
Uw webapplicatie beveiligen
Zoeken…
Invoering
Onthoud CodeIgniter is een ontwikkelingsraamwerk. Het streeft er niet naar om uw applicatie veilig te maken. Het geeft je alleen de tools om het zelf te doen. Als u de pagina Beveiliging van CI bekijkt, is het vrij duidelijk dat ze verwachten dat de ontwikkelaar Application Security begrijpt en deze in hun applicatie inbouwt.
Als WebApp-beveiliging relatief nieuw voor u is, zou ik beginnen met OWASP. Het kan voordelig zijn om naar andere kaders te kijken, zoals Zend of Cake, waarvan ik geloof dat ze meer dingen vooraf doen
Syntaxis
- $ freshdata = $ this-> security-> xss_clean ($ user_input_data);
parameters
reeks gebruikersinvoer | blanco |
---|---|
array van gebruikersinvoer invoegen in xss_filter($array of user input) | Blanco |
XSS-preventie
XSS betekent cross-site scripting. CodeIgniter wordt geleverd met XSS-filterbeveiliging. Dit filter voorkomt schadelijke JavaScript-code of elke andere code die probeert cookies te kapen en kwaadaardige activiteiten uit te voeren. Gebruik de methode xss_clean () om gegevens te filteren via het XSS-filter, zoals hieronder wordt weergegeven.
$data = $this->security->xss_clean($data);
Gebruik deze functie alleen wanneer u gegevens verzendt. De optionele tweede Booleaanse parameter kan ook worden gebruikt om het afbeeldingsbestand te controleren op XSS-aanvallen. Dit is handig voor het uploaden van bestanden. Als de waarde waar is, betekent dit dat het beeld veilig is en niet anders.
SQL-injectiepreventie
SQL-injectie is een aanval op de databasequery. In PHP gebruiken we de functie mysql_real_escape_string () om dit samen met andere technieken te voorkomen, maar CodeIgniter biedt ingebouwde functies en bibliotheken om dit te voorkomen.
We kunnen SQL-injectie in CodeIgniter op de volgende drie manieren voorkomen:
- Ontsnappen aan vragen
- Zoekopdracht afwachten
- Actieve opnameklasse
Ontsnappen aan vragen
<?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()
voegt automatisch enkele aanhalingstekens rond de gegevens toe en bepaalt het gegevenstype zodat deze alleen stringgegevens kan ontsnappen.
Zoekopdracht afwachten
<?php
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
?>
In het bovenstaande voorbeeld wordt het vraagteken (?) Vervangen door de array in de tweede parameter van de functie query()
. Het belangrijkste voordeel van het bouwen van query's op deze manier is dat de waarden automatisch worden overgeslagen, wat veilige query's oplevert. CodeIgniter-engine doet het automatisch voor u, zodat u het niet hoeft te onthouden.
Actieve opnameklasse
<?php
$this->db->get_where('subscribers_tbl',array('status'=> active','email' => '[email protected]'));
?>
Met behulp van actieve records wordt de query-syntaxis gegenereerd door elke database-adapter. Het maakt ook veiligere zoekopdrachten mogelijk, omdat de waarden automatisch ontsnappen.
PHP-fouten verbergen
In een productieomgeving willen we vaak geen foutmeldingen aan de gebruikers weergeven. Het is goed als het is ingeschakeld in de ontwikkelomgeving voor foutopsporing. Deze foutmeldingen kunnen enige informatie bevatten die we om veiligheidsredenen niet aan de gebruikers van de site mogen tonen.
Er zijn drie CodeIgniter-bestanden die verband houden met fouten. PHP Foutmeldingsniveau
Verschillende omgevingen vereisen verschillende niveaus van foutrapportage. Standaard vertoont de ontwikkeling fouten, maar testen en live zullen ze verbergen. Er is een bestand met de naam index.php in de hoofdmap van CodeIgniter, dat voor dit doel wordt gebruikt. Als we nul als argument doorgeven aan de functie error_reporting (), dan verbergen alle fouten.
CSRF-preventie
CSRF staat voor cross-site verzoekvervalsing. U kunt deze aanval voorkomen door een optie in te schakelen in het bestand application / config / config.php zoals hieronder weergegeven.
$config['csrf_protection'] = TRUE;
Wanneer u een formulier maakt met de functie form_open()
, wordt automatisch een CSRF-token in een verborgen veld ingevoegd. U kunt het CSRF-token ook handmatig toevoegen met de functie get_csrf_token_name()
en get_csrf_hash()
. Zoals hun namen suggereren, retourneert de functie get_csrf_token_name()
de naam van het CSRF-token, terwijl get_csrf_hash()
de hash retourneert.
Het CSRF-token kan elke keer opnieuw worden gegenereerd voor indiening of u kunt het ook gedurende de gehele levensduur van de CSRF-cookie behouden. Als u de configuratieoptie 'csrf_regenerate' instelt, wordt de regeneratie van het token gedwongen, zoals hieronder wordt weergegeven.
$config['csrf_regenerate'] = TRUE;
U kunt URL's op de witte lijst zetten vanuit CSRF-bescherming door overeenkomsten voor hen in de configuratieserie in te stellen met behulp van de sleutel 'csrf_exclude_uris' zoals hieronder weergegeven. U kunt ook reguliere expressies gebruiken.
$config['csrf_exclude_uris'] = array('api/person/add');
Verwijder misbruikgegevens uit gebruikersinvoer
// 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-preventie bij gebruikersinvoer
Vertrouw niet op gebruikersinvoer. gebruiker voert alles in, zoals <script>
-tag of een JavaScript- alert();
dus we moeten voorkomen dat alle gegevens niet in onze browser worden uitgevoerd. dus we moeten de xss-preventiemethode gebruiken om onze beveiligde gegevens te beperken en in de hand van de hacker te houden, en ook de verantwoordelijkheid van de ontwikkelaar voor de validatie van de invoer van de gebruiker en het oplossen van fouten door programmering.
dus controleer of dit een voorbeeld is van xss-preventie in 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
dus na het toevoegen van xss_filtering hebben we geen probleem om misbruikcode uit te voeren die door de gebruiker wordt ingevoerd. en CodeIgniter vervangen deze misbruiktag door [removed]
trefwoord.