$tablenavn sætter jeg kun selv.
Jeg har kørt et program der hedder Acunetix som kan teste sådan noget også lader det til der er sket injection med den kode ovenfor.
Jeg har denne kode som hente data og viser på hjemmesiden.
- if ($stmt = $db->prepare("SELECT * FROM $GLOBALS[setup][tablenavn] ORDER BY 'gennemsnit' DESC")) {
-
- $stmt->execute();
-
- if ($stmt->bind_result($id, $antalstemmer, $total, $gennemsnit, $url, $sidsteip)) {
-
- while ($stmt->fetch()) {
-
- $tableindhold .= '<tr>';
- $tableindhold .= '<td>' . $id . '</td>';
- $tableindhold .= '<td>' . $antalstemmer . '</td>';
- $tableindhold .= '<td>' . $total . '</td>';
- $tableindhold .= '<td>' . $gennemsnit . '</td>';
- $tableindhold .= '<td>' . $url . '</td>';
- $tableindhold .= '<td>' . $sidsteip . '</td>';
- $tableindhold .= '</tr>';
-
- }
-
- }
-
- $stmt->close();
Når jeg går ind på siden kommer der en Javascript alter() boks hvor der står 953153 fordi denne kode står mellem td og /td og det gør den ved $url.
'"()&%1<ScRiPt >prompt(953153)</ScRiPt>
Det hedder måske ikke injection ?
Det skal kun være tilladt med en URL i $url som fåes gennem GET.
Så det skal ikke være tilladt med HTML tags og javascript kode osv.
Hvordan gør jeg det på den bedste måde ?
Jeg kan gøre sådan her men er det mening man skal gøre sådan ?
Det vel bedre at sikre sig det ikke kommer ind til at starte med.
- $url = str_replace("<", "<", $url);
- $url = str_replace(">", ">", $url);
Indlæg senest redigeret d. 01.02.2013 00:54 af Bruger #13010