Beveiligings probleem.

Status
Niet open voor verdere reacties.

XenomX

Gebruiker
Lid geworden
27 apr 2002
Berichten
822
Mede dankzij de tutorials van blaataap ondekte ik dat mijn website ook niet veilig is :eek:

(http://www2.helpmij.nl/forum/showthread.php?threadid=118028)

Ik include de pagina ook op een foute manier, zo dus:


PHP:
if(!$_GET['content']) 
	$_GET['content'] = "Home";      
              
if(file_exists($_GET['content'].'.php')) 
	include($_GET['content'].'.php');      
else 
	include("404.php");

Zo kan je dus ook ?content=hack doen en in hack.php heb ik dan weer show_source("inc/config.php");

Hoe kan ik dit goed oplossen?
De manier hoe blaataap het zei lukt me niet, ik ben nog steeds aan het 'vogelen', alle tips en oplossingen zijn welkom :thumb:
 
Opgelost (denk ik)

PHP:
if (eregi("http\:\/\/", $content)) {
	die("Hacking Attempt!<br><br>Bye.");
    }

Als er http:// na ?content= komt stop het script.

Hiermee is het opgelost denk ik.
 
PHP:
<?php

$p = 'home';
$pages = array ( 'index', 'home', 'login', 'pagina1' );
if ( isset ( $_GET['p'] ) == TRUE && in_array ( $_GET['p'], $pages ) == TRUE )
{
  $p = $_GET['p'];
}

include ( $p . '.php' );

?>

Note: Eregi is traag. En met jou idee de url inc/config.php wordt ingegeven, gaat ie nog steeds door.
 
Geplaatst door XenomX
Opgelost (denk ik)

PHP:
if (eregi("http\:\/\/", $content)) {
	die("Hacking Attempt!<br><br>Bye.");
    }

Als er http:// na ?content= komt stop het script.

Hiermee is het opgelost denk ik.
Ten eerste is eregi() de traagste manier om reguliere expressies te gebruiken.

Ten tweede check je niet of $content begint met 'http://', maar of 'http://' voorkomt in $content.

Ten derde is dit nog steeds niet veilig, men kan het tenslotte ook nog gewoon ff op HTTPS zetten en vervolgens gaan includen.

Ten vierde durf ik te wedden dat je je vorige include systeem niet eens getest hebt op dat beveiligingslek, hij is er namelijk niet. De specificaties op php.net zeggen over file_exists() namelijk duidelijk dat de functie alleen op lokale bestanden werkt (*klik*, bij remote files levert hij dus altijd FALSE. Onder remote files vallen dus ook bestanden over de HTTP-verbinding.

Ten vijfde zou ik een beveiliging inbouwen dat men niet die pagina op kan geven als $content. Als het bestand waarin dat include()-systeempje staat bijv. 'index.php' heet en men zou in de adresbalk ?content=index.php opgeven, dan krijg je een oneindige lus doordat hij voortdurend zichzelf zal proberen te includen, die zichzelf dan ook weer wil includen, die het dan ook weer wil doen, [...]

Ten zesde: waarom gebruik je dit eigenlijk ? Waarom niet gewoon include( 'code_die_op_elke_pagina_uitgevoerd_moet_worden.php' ); op al je contentpagina's ? Is korter qua code, XSS (cross side scripting, waar je vraag over gaat) is onmogelijk en het is zoekmachinevriendelijker.
 
Laatst bewerkt:
Ten tweede check je niet of $content begint met 'http://', maar of 'http://' voorkomt in $content.
Het Forum haalt de andere slashes weg.
Code:
http\:\/\/

Ten vierde durf ik te wedden dat je je vorige include systeem niet eens getest hebt op dat beveiligingslek, hij is er namelijk niet. De specificaties op php.net zeggen over file_exists() namelijk duidelijk dat de functie alleen op lokale bestanden werkt (*klik*, bij remote files levert hij dus altijd FALSE. Onder remote files vallen dus ook bestanden over de HTTP-verbinding.
Je hebt gelijk, ben bang dat ik het in dezelfde server heb getest.

Hiermee is het probleem sowieso al opgelost.

Ten vijfde zou ik een beveiliging inbouwen dat men niet die pagina op kan geven als $content. Als de pagina waarop dat include()-systeempje staat bijv. in het bestand 'index.php' staat en men zou in de adresbalk ?content=index.php opgeven, dan krijg je een oneindige lus.
Deze melding krijg ik dan.

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Ten zesde: waarom gebruik je dit eigenlijk ? Waarom niet gewoon include( 'code_die_op_elke_pagina_uitgevoerd_moet_worden.php' ); op al je contentpagina's ? Is korter qua code en zoekmachinevriendelijker.

Na dit alles gelezen te hebben ga ik dit ook doen ;)

JPeetje bedankt! :thumb:

en masterprut natuurlijk ook.

:thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan