Avatar billede webzone Nybegynder
20. december 2008 - 23:05 Der er 4 kommentarer og
1 løsning

fejl i script, som sletter en fil i bestemt mappe, samt database

Hej eksperter.
En tricky lille en.

Jeg har det her script som skulle kunne slette filer fra en bestemt mappe
mappen hedder opslag
Desuden skal den samtidig slette posten fra databasen hvilket den også gør.
Men den sletter ikke filen fra mappen opslag.
Er der nogen der kan se hvor den skulle slette filen, samt hvad der kan være galt siden dette ikke sker.
det skulle efter sigene virke hos Egon, som har lavet scriptet, så det er lidt mystisk.

her er koden:

<?php

/*------------------------------------------------------+
| PHP-Fusion 7 Content Management System                |
+-------------------------------------------------------+
| Opslags tavle,                                         |
| Infusion lavet af Egon Jessen,                         |
--------------------------------------------------------*/

require_once "../../maincore.php";
require_once THEMES."templates/header.php";

if (file_exists("locale/".$settings['locale'].".php")) {
    include "locale/".$settings['locale'].".php";
} else {
    include "locale/Danish.php";
}

require_once "opslag_values.php";
require_once "gruppe_rettigheder.php";

if ($gruppe_id !=""){
// bemærk data hentes i filen gruppe_rettigheder.php

//pop up ved sletning
echo "<script type='text/javascript'>
function Defuse() {
    return confirm('Skal opslaget slettes?');
}
</script>\n";

//sletter aktuelt post
if ($action == "slet" AND $slette=="Ja")
{
    unlink($filnavn);
    $result = dbquery("DELETE FROM ".$db_prefix."$tabel_opslag WHERE opslag_id=$opslag_id");
    $action = "";
    $message="Opslaget er slettet";
    redirect(FUSION_SELF."?gruppe_id=$gruppe_id&message=$message");
}
//slut på slet

//oversigten
opentable("$titel");
echo "
<dd>
<table width='90%'>
<tr><td colspan='7'><img src='$logo_filnavn' width=$logo_bredde> <font size=3><b> $gruppenavn</b></font></td><td align='right'>$link_info</td><tr>
<tr><td colspan='8'><hr></td></tr>
";
if ($se=="Ja"){

//henter data
$result = dbquery("SELECT * FROM ".$db_prefix."$tabel_opslag WHERE gruppe_id=$gruppe_id order by opslag_id DESC");
//kontrol af om der er opslag
$records = dbrows($result);
if ($records != 0) {
//henter data
while ($data = dbarray($result)) {
$tekst = $data['tekst'];
$remark = $data['remark'];
$dato = showdate("shortdate", $data['dato']);
$filnavn = $data['filnavn'];
$user_navn = $data['user_navn'];
$id = $data['user_id'];
$opslag_id = $data['opslag_id'];
$slet="-";
if ($slette=="Ja"){
$slet = "<a href=vis_bruger_opslag.php?opslag_id=$opslag_id&action=slet&filnavn=$filnavn&gruppe_id=$gruppe_id onclick='return Defuse();'><b><font size=2><img src='images/slet.gif' border='0' width='10'>".$locale['f1']."</font></b></a>";
}   
$rediger=" - ";
if ($id==$user_id OR $slette=="Ja"){
$rediger = "<a href=edit_bruger_opslag.php?opslag_id=$opslag_id&gruppe_id=$gruppe_id><b><img src='images/slet.gif' border='0' width='10'>".$locale['f2']."</b></a>";
}   


Echo"
<tr>
    <td colspan='4' width='50%'><a target='_blank' href=".$filnavn."><b><font size=2><img src='".INFUSIONS."$mappe/images/pin.gif' border='0'>  $tekst</font></b></a><br>$remark</td>
    <td>$dato</td>
    <td>$user_navn</td>
    <td>$rediger</td>
    <td>$slet</td>
</tr>
<tr><td colspan='8'><hr></td></tr>

";
}
} else {
echo "
  <tr>
  <td>".$locale['f3']."</td>
  </tr>
<tr><td colspan='8'><hr></td></tr>
";
}
}
Else {
    Echo "".$locale['f4']."";
}
echo "
<tr><td colspan='8' >".$locale['f5']." $se_opslag ".$locale['f6']." $skrive_opslag ".$locale['f7']." $slette_opslag ".$locale['f8']."</td></tr>
<tr><td colspan='8'><hr></td></tr>
<tr><td colspan='4'>$add_opslag</td><td colspan='4'><input type='button' class='button' value='".$locale['f20']."' onclick=\"java script:location.href='opslag_grupper.php'; return false\" /></td>
</tr>
<tr><td colspan='8'><hr></td></tr>
<tr><td colspan='8'>$sidefod</td><tr>
</table>
</dd>
";
closetable();
}

require_once THEMES."templates/footer.php";
?>
Avatar billede olebole Juniormester
21. december 2008 - 19:34 #1
<ole>

Egon har ikke det allermindste begreb om PHP - eller serverkode generelt! Scriptet virker kun på servere med en tussegammel og yderst risky opsætning (hvor register_globals er sat til 'on'). Derudover er det rent selvmord at bruge scriptet, da der overhovedet ikke valideres på brugerinput ... en guldrandet invitation til enhver, der føler for at slette din DB og filer, samt lægge serveren ned!

Glem alt om Egons elendige kode og find i stedet noget, der dur  ;o)

/mvh
</bole>
Avatar billede webzone Nybegynder
21. december 2008 - 20:13 #2
Så vidt jeg er orienteret om, skulle valideringen foregå i gruppe_rettigheder, samt maincore. Kan godt være at jeg tager fejl.
Det virker som om du kender ham?

Dette er kun en del af det komplette script, som består af flere php sider, samt mapper

Dertil skal det siges at jeg køre med reg globals off, og scriptet virker som det skal, men sletter bare ikke den aktuelle fil i den aktuelle mappe.

Er dette script et sikkerhedshul i sig selv. Vil du så ikke specificer det lidt nærmere, da jeg ikke er den mest hardcore koder. :) Stadig i lærer..
Avatar billede olebole Juniormester
21. december 2008 - 20:24 #3
Nej, jeg kender ham ikke ... og det agter jeg at blive ved med  :)

Ja, du tager fejl. Dine brugere kan stort set slette, hvad somhelst med det script.

Scriptet _kan_ ikke køre med register_globals sat til 'off'.

Man må _aldig_ bruge input, der stammer fra en bruger direkte - det er rent selvmord! Han kan jo f.eks. sende, hvad somhelst med som 'gruppe_id', 'opslag_id' og 'filnavn' ... der tjekkes ikke, om det overhovedet er noget, der må slettes.

Der tjekkes heller ikke for SQL-injection (slå det op på Google), hvilket blot gør det hele endnu mere håbløst.

Smid skidtet ud, brænd din HD og skyd katten, hvis den har læst over skulderen på dig  ;o)
Avatar billede webzone Nybegynder
21. december 2008 - 21:56 #4
Det er jo en infusion til php fusion 7.0.2, som har sin egen login, så det er jo kun en begrænset brugergruppe der har adgang.

instillingerne er sat til at det kun er admins der kan oprette/slette (kan dog ændres)

Jeg køre med globals off og scriptet virker, bortset fra at det ikke sletter den fil der bliver oprettet i mappen opslag, som ligger under infusions.

hvis det virkelig kan lægge serveren ned på trods af de foranstaltninger er jeg da åben over for andre/bedre scripts, hvor admins kan uploade/downloade filer til en mappe/database
Avatar billede webzone Nybegynder
02. juni 2009 - 10:21 #5
Nå det har jeg måtte opgive, da jeg ikke har fået det til at virke.
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