Avatar billede niclasp Nybegynder
26. november 2006 - 02:20 Der er 3 kommentarer

Problemer med sikkerhedshuller - Injection af Include funktionen

Hey.

Jeg har nogle gange haft problemer med udsending af spam via min hjemmeside.

jeg har fået afvide at det skyldes include( ) funktionen på min side.
One.com opfordrede mig til at aktivi php_5 istedet for php_4 samt slå register_globab fra (Den står nemlig på ON)

Den eneste include jeg sådan set bruger på index er

            <?php if(isset($_GET['goto']))
            { include($_GET['goto']); }
            else { include("news/index.php"); }; ?>

Er der nogen der kan hjælpe mig?
Jeg kan bare ikke finde en løsning og de siger at næste gang bliver permanet lukning.
Avatar billede coderdk Praktikant
26. november 2006 - 06:16 #1
<?php if(isset($_GET['goto']))
            { include($_GET['goto']); }
            else { include("news/index.php"); }; ?>

Kan du skrive lidt mere sikkert om til:

<?php

    $root = realpath( "." ) . "/";
    $goto = ( !empty( $_GET['goto'] ) ? $_GET['goto'] : "news/index.php" );
    $goto = realpath( $root . $goto );
    if ( !is_file( $goto ) || substr( $goto, 0, strlen( $root ) ) != $root
        || $goto == __FILE__ )
    {
        $goto = 'news/index.php';
    }

    include( $goto );

?>

Du kan øge sikkerheden yderligere ved ikke at angive .php i URL'en, men tilføje den i scriptet sådan:

<?php

    $root = realpath( "." ) . "/";
    $goto = ( !empty( $_GET['goto'] ) ? $_GET['goto'] : "news/index.php" );
    $goto = realpath( $root . $goto . ".php" );
    if ( !is_file( $goto ) || substr( $goto, 0, strlen( $root ) ) != $root
        || $goto == __FILE__ )
    {
        $goto = 'news/index.php';
    }

    include( $goto );

?>
Avatar billede coderdk Praktikant
26. november 2006 - 06:17 #2
Jeg kan se du bruger $_GET, måske er det helt ok for dig at slå register_globals fra, prøv det og se om det gør en forskel... Langt de fleste PHP4-scripts kører fint i PHP5! Igen, prøv det og se :)
Avatar billede erikjacobsen Ekspert
26. november 2006 - 10:15 #3
Det du gør svarer til at lade din pung ligge fremme på en bænk i parken hele dagen. Når du henter den om aftenen, så er der nok ikke så meget tilbage. Det er et kendt og udnyttet hul, og noget man bare ikke gør.

Har du fået koden, eller hjælp til koden, et sted, så vil jeg anbefale dig aldrig at få hjælp derfra igen.

Du skal huske at slette alle filer i alle kataloger, da der sagtens kan være lagt en bagdør på serveren, som du ikke lige lægger mærke til.

En løsning, der er knap så avanceret, men ganske sikker, og nem at forstå, er denne:

1) Links ser ud som    dinside.php?id=4

2) Din kode ser i alt væsentligt ud som

    $id='0';
    if (isset($_GET['id'])) $id = $_GET['id'];
    switch ($id) {
      case '1':  include("sidenummer1.php"); break;
      case '2':  include("sidenummer2.php"); break;
      case '3':  include("sidenummer3.php"); break;
      case '4':  include("sidenummer4.php"); break;
      default:    include('forside.php');
  }
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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