PHP mysql_real_escape_string



PHP´s mysql_real_escape_string funktion er egentlig ganske simpel at bruge, men desværre er der stadig folk der ikke prøver at beskytte deres MySQL databaser mod SQL injection - eller på gammelt dansk SQL indsprøjtning.

Hvorfor folk så ikke bruger mysql_real_escape_string, kan man undre sig over - for funktionen har været i PHP siden version 4.3.0 - og eftersom vi nu skriver ~5.3.6 kan det godt undre mig at mange programmører stadig ikke bruger denne.

Eksempel på SQL injection

<?php
$username = $_POST['username'];
$password = $_POST['password'];

$sqls = "select * from user where user = '$username' and '$password'";
$users = mysql_query($sqls);
?>

Hvis de værdier der bliver POST'et ind mod siden - er $_POST['username'] = 'tomchristensen'; $_POST['password'] = "' OR ''='"; Vil enhver kunne logge på som tomchristensen - og med et en URLencoded version af ' OR ''=' (også skrevet sådan: %27+OR+%27%27%3d%27 )

Eksempel på hvordan du undgår SQL injection

<?php
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);

$sqls = "select * from user where user = '$username' and '$password'";
$users = mysql_query($sqls);
?>

eller

<?php
$username = $_POST['username'];
$password = $_POST['password'];

$sqls = "select * from user where
            user = '".mysql_real_escape_string($username)."'
            and '".mysql_real_escape_string($password)."'";

$users = mysql_query($sqls);
?>

Derudover kan du lave andre forholdsregler...


Eksempelvis kan du - for at være sikker på at du KUN får tal ind i en $_GET['side'] variable der bruges til sideskift - (Vis side 1 af 200) hvor URL måske er www.phptips.dk/visside.php?side=1 bruge en anden funktion is_numeric. Det vil sige at du FORVENTER at $_GET['side'] er et tal, og hvis det ikke er de - kan du sådan set godt die; scriptet.

Eksempel

<?php
if (isset($_GET['side'])) {
   if (!is_numeric($_GET['side'])) { 
    echo "Indtrængning!!!"; die; 
   } else {
    $side = $_GET['side'];
   }
}

?>

Kommentarer:
Du skal være logget ind for at bruge denne funktion.
Brugernavn
Kodeord


Det er gratis at oprette en bruger
Hop til toppen