Originariamente inviato da filippo.toso
Una versione più compatta, e per certi versi più sicura:

Codice PHP:
<?php 
$action 
= isset($_GET['action']) ? $_GET['action'] : 'Dashboard'
$path dirname(__FILE__) . "/Actions/$action.action.php";
if (!
is_readable($path)) {
  die(
'Error');
}
?>
Ancor meglio:

Codice PHP:
<?php 
$valid_actions 
= array('Dashboard''Forum''Login''Store');
$default_action 'Dashboard';

$action = isset($_GET['action']) && in_array($_GET['action'], $valid_actions) ? $_GET['action'] : $default_action
$path dirname(__FILE__) . "/Actions/$action.action.php";
if (!
is_readable($path)) {
  die(
'Error');
}
?>
mmm, non voglio mettere dentro un array le azioni supportate, quando devo fare modifiche mi tocca andare ad aggiornare anche la index, a me piaccono le cose automatizzate ^^

Inoltre considera che
codice:
$path = dirname(__FILE__) . "/Actions/$action.action.php";
if (!is_readable($path)) {
  die('Error');
}
non è proprio per niente sicuro :lol:

guarda che fatto cosi, se non ci fosse il check dell'array, come non c'è sopra, passando un po di ../ e la path e cosi via si potrebbe tranquillamente includere un file che non stia dentro Actions!

Il check che faccio con realpath questo lo include: realpath nel caso il percorso non esista e/o non sia accessibile da php restituisce false altrimenti restituisce il percorso liscio, ovvero se ci stanno ad esempio ../../../../etc/passwd (nel caso che tutti i vari chup portino alla root del disco) mi restituirebbe /etc/passwd (leggibile da php perché è leggibile da tutti gli utenti) e verifico con il secondo pezzo dell'if se ci posso accedere o meno, ovvero

codice:
dirname($pathCheck) !== realpath('./Actions')
dirname($pathCheck) mi restituirà nel caso di spora /etc che è diverso da /path/alla/root/del/sito/web/Actions

Originariamente inviato da gianiaz
io seguo più o meno questo metodo, in realtà non faccio particolari verifiche, ma solo:

require(DIRECTORY.$action.".inc.php");

Se nella get mi mettono qualsiasi porcheria tipo "www.altrosito.com" non ho problemi (o fino ad ora almeno non ne ho avuti..

L'ideale magari sarebbe creare un'array di action valide e testarla con in_array, che dici?

ciao
si ma in quel modo sei soggetto a possibili attacci cross site perché nel caso che non ci stia settato l'open base dir, e molti non lo settano altrimenti php non può accedere a /tmp e quindi andrebberò cambiati altri svariati parametri, si potrebbe accedere a file presenti su alri account del server e quindi anche a file con un nome ad hoc