Beste mensen, ik heb te horen ekregen dat in een source van mij een RFI bug zit.

<?PHP
$page = substr($_GET['page'],0,3);
$page1 = substr($_GET['page'],0,7);

if( ($page == "../") OR ($page == "ima") OR ($page == "inc") OR ($_GET['page'] == "./") OR ($_GET['page'] == "../") OR ($page == "../") OR ($page1 == "http://") OR ($_GET['page'] == "/etc/passwd") OR ($_GET['page'] == "style/style.css") ) {
include("errors/error.php"); // Error
} else {
if ( !empty ( $_GET['page'] ) AND isset ( $_GET['page'] ) ) {
if ( file_exists ( $_GET['page'] ) ) {
include $_GET['page']; // Page self
} else {
include("errors/error.php"); // Error
}
} else {
include("home.php"); // Index
// }
}
}
}
?>

Is de code bij mij, ik werk verder op de site met mod_rewrite.

Wat is hier fout aan?

En wat kan je tegen RFI bugs doen, en wat is het precies?
Martin Meijer schreef op 24.04.2007 16:59
RFI bug

En wat mag dat zijn?
Ik gok op: Remote File Injection (maar zelf nog nooit gehoord..)
ja inderdaad ik denk dat dat het is, maar ik weet zelf ook niet precies van hoe en wat het nu is daarom vraag ik het hier even.
Geef eens een link, denk wel dat ik de fout zie...
Waarom gebruik je hier geen switch bij, als je toch veel dingen wilt filteren?
Weet je ook zeker dat alleen die dingen geselecteerd worden.

[edit]
Typo
[/edit]
Ik gebruik voor grote vergelijkingen altijd: in_array(). dat werkt helemaal goud, gewoon een array vullen met informatie en die op deze manier vergelijken met de input...
Inderdaad roep in deze pagina maar eens page=index.php op als dit script zich in index.php bevind... En daar heb je je oneindige loop. Dus even nog een or toevoegen met als page = index.php error weergeven...

[edit]Typo[/edit]
Maar goed, het gaat mij om de RFI wat kan ik ertegen doen?
Martin Meijer schreef op 24.04.2007 17:37
Maar goed, het gaat mij om de RFI wat kan ik ertegen doen?


Nog een or toevoegen en daar index.php neerzetten

[edit]Waar slaat dit op? if ( !empty ( $_GET['page'] ) AND isset ( $_GET['page'] ) ) { !empty is het zelfde als isset... Omdat die ! voor empty staat. Zo die !empty of isset kan je zelfs nog weghalen ook.[/edit]

[edit]SplaakgeGeblek[/edit]
@mebus, or? Ik zal het zometeen eens testen, ze hebben weer de database gedropt.

Reageren