Scripts

Basisbeveiliging tegen Mysql-injecties

Deze functie gaat alle variabelen door en beveiligt elk met mysql_real_escape_string, mysql_escape_string of addslashes. Zelfs arrays worden meegenomen. In de meest ideale situatie laadt je deze script voor elk ander script. Je dient helaas, i.v.m. mysql_real_escape_string, de script net onder je DB-connectie te zetten, anders geeft deze een error terug.

basisbeveiliging-tegen-mysqlinjecties
<?php
/****************************
Module Laatst gewijzigd:    12-04-2008

* http://nl3.php.net/manual/en/security.database.sql-injection.php
* http://dev.mysql.com/tech-resources/articles/guide-to-php-security-ch3.pdf
    
* Notitie: Deze script is overigens bij 't origineel in het engels (en wat gedetaileerder) becommentariseert aangezien ik mijn systeem later op sourceforge wil delen. Bij deze alvast een voorproefje!
****************************/

function secure_it($secval='')
{
/****************************
De functies staan in chronologische volgorde voor gebruik.
1. 'mysql_real_escape_string' = Sinds PHP v. 4.3.0 (DBcon)
2. 'mysql_escape_string' = Sinds PHP v. 4.0.3 (verouderd)
3. 'addslashes' = Als de rest ook faalt...
****************************/
$secure_func_array = array
(
'mysql_real_escape_string',
'mysql_escape_string',
'addslashes'
);

/****************************
Doormiddel van deze foreach lezen we de hierboven opgegeven array uit
en checken met function_exists of de functie bestaat.
****************************/
foreach($secure_func_array as $sec_array)
{
    if(function_exists($sec_array) and !isset($f2use) and empty($f2use))
    { $f2use = $sec_array; }
}
            
	if(!empty($secval))
	{
	    /****************************
	    Indien de variabele een array bevat, gaan we hier verder. $_POST
	    en $_GET zijn bijvoorbeeld beiden een array.
	    ****************************/
	    if(is_array($secval))
	    {
	        foreach($secval as $var_name => $var_val)
	        {
	        /****************************
	        Indien de "uitgepakte" var nóg een array bevat, 
	        herbruiken we deze functie om dieper door 
	        te gaan. Je kan zo ongelimiteerd de array's doorlopen
	        ****************************/
	    
	            if(is_array($var_val))
	            {
	            $output[$var_name] = secure_it($var_val);
	            }
	            else
	            {
	                if(get_magic_quotes_gpc()) 
	                { stripslashes($var_val); }
	            $output[$var_name] = $f2use($var_val); 
	            }
	        }
	    }
	    else
	    { 
	    /****************************
	    Indien de variabele verder geen array bevat komen we hier en
	    beveiligen de var rechtstreeks
	    ****************************/
	        if(get_magic_quotes_gpc()) 
	        { stripslashes($secval); }
	    $output = $f2use($secval); 
	    }
	}
    if(isset($output) and !empty($output))
    { return $output; }
}
        
if(isset($_SERVER) and !empty($_SERVER) and is_array($_SERVER))
{ $_SERVER = secure_it($_SERVER); }

if(isset($_POST) and !empty($_POST) and is_array($_POST))
{ $_POST = secure_it($_POST); }
        
if(isset($_GET) and !empty($_GET) and is_array($_GET))
{ $_GET = secure_it($_GET); }
        
?> 

Reacties

0
Nog geen reacties.