Avatar billede buxxy Praktikant
09. februar 2011 - 11:55 Der er 4 kommentarer og
1 løsning

SQL Injection Vulnerability

Hej Eksperter.

Jeg har lavet et Auto Database System til salg af biler. Nu har jeg så, til min store forbløffelse, fundet en side der beskriver at der er SQL Injection Vulnerability i en af mine koder.

Siden jeg fandt det på er her: http://www.securelist.com/en/advisories/43235

Er her en venlig sjæl der kan/vil hjælpe mig med at få koden skrevet på en sådan måde at der ikke længere er sikkerhedsbrist i ?

Her følger koden til search.php:

$result = dbquery("SELECT * FROM ".DB_ADS." WHERE car_model like '%".$_POST['SEARCHSTRING']."%'");
$rows = dbrows($result);

if ($rows != 0) {

opentable($locale['ads007']);

echo "<table cellpadding='2' cellspacing='2' width='100%'>\n<tr>\n";
echo "<td class='tbl-border tbl2' width='47%' valign='top'><b><u>".$locale['ads202']."</u></b></td>\n";
echo "<td class='tbl-border tbl2' width='12%' valign='top'><b><u>".$locale['ads203']."</u></b></td>\n";
echo "<td class='tbl-border tbl2' width='14%' valign='top'><b><u>".$locale['ads210']."</u></b></td>\n";
echo "<td class='tbl-border tbl2' width='12%' valign='top'><b><u>".$locale['ads211']."</u></b></td>\n";
echo "<td class='tbl-border tbl2' width='15%' valign='top'><b><u>".$locale['ads212']."</u></b></td>\n";
echo "</tr>\n</table>\n";

while ($data = dbarray($result)) {

echo "<table cellpadding='2' cellspacing='2' width='100%'>\n<tr>\n";
echo "<td class='tbl-border tbl1' width='47%' valign='top'><a href='".INFUSIONS."car_list_panel/car_desc.php?action=view&amp;car_id=".$data['car_id']."' title='".$data['car_model']."'>".$data['car_model']."</a></td>\n";
echo "<td class='tbl-border tbl1' width='12%' valign='top'>".$data['car_year']."</td>\n";
echo "<td class='tbl-border tbl1' width='14%' valign='top'>".$data['car_km']."</td>\n";
echo "<td class='tbl-border tbl1' width='12%' valign='top'>".$data['car_pris']."</td>\n";
echo "<td class='tbl-border tbl1' width='15%' valign='top'><a href='".INFUSIONS."car_list_panel/car_desc.php?action=view&amp;car_id=".$data['car_id']."' title='".$data['car_model']."'><img width='75' height='56' src='".IMAGES."cars/".$data['car_pic1']."' alt='".$data['car_model']."' border='0' /></a></td>\n";
echo "</tr>\n</table>\n";
}
echo " <div align='left' style='vertical-align: middle;'><a href='java script:history.back()' title='".$locale['ads310']."'><img src='".INFUSIONS."car_list_panel/images/retur.gif' border='0' style='vertical-align:middle;' alt='".$locale['ads310']."' /></a>&nbsp;&nbsp;<a href='#' onclick='print();' title='".$locale['ads313']."'><img src='".THEME."images/printer.gif' border='0' style='vertical-align: bottom;' alt='".$locale['ads313']."' /></a></div>\n";
closetable();
} else {
opentable($locale['ads008']);
echo "<div>".$locale['ads009']."</div>\n";
echo "<div align='left' style='vertical-align: middle;'><a href='java script:history.back()' title='".$locale['ads310']."'><img src='".INFUSIONS."car_list_panel/images/retur.gif' border='0' style='vertical-align:middle;' alt='".$locale['ads310']."' /></a>&nbsp;&nbsp;<a href='#' onclick='print();' title='".$locale['ads313']."'><img src='".THEME."images/printer.gif' border='0' style='vertical-align: bottom;' alt='".$locale['ads313']."' /></a></div>\n";
closetable();
}

Mvh.
Buxxy.
Avatar billede michael_stim Ekspert
09. februar 2011 - 12:07 #1
Avatar billede repox Seniormester
09. februar 2011 - 12:11 #2
Fusion tilbyder ikke en saniterende funktionalitet, så du må selv finde på noget der kan imitere mysql_real_escape_string (som #1 henviser til).

Et forslag er her:
function mysql_escape_mimic($inp) {
    if(is_array($inp))
        return array_map(__METHOD__, $inp);

    if(!empty($inp) && is_string($inp)) {
        return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $inp);
    }

    return $inp;
}


Og så brug den på $_POST['SEARCHSTRING']:
$result = dbquery("SELECT * FROM ".DB_ADS." WHERE car_model like '%".mysql_escape_mimic($_POST['SEARCHSTRING'])."%'");
Avatar billede repox Seniormester
09. februar 2011 - 12:22 #3
Klippe-klistre fejl... Brug denne funktion i stedet:
        function mysql_escape_mimic($str)
        {
                $search=array("\\","\0","\n","\r","\x1a","'",'"');
                $replace=array("\\\\","\\0","\\n","\\r","\Z","\'",'\"');
                return str_replace($search,$replace,$str);
        }
Avatar billede buxxy Praktikant
09. februar 2011 - 12:36 #4
Tusind tak @repox!

Smider du lige et svar ?
Avatar billede repox Seniormester
09. februar 2011 - 12:40 #5
Det fik du her...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester