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 ^^Originariamente inviato da filippo.toso
Una versione più compatta, e per certi versi più sicura:
Ancor meglio:Codice PHP:<?php
$action = isset($_GET['action']) ? $_GET['action'] : 'Dashboard';
$path = dirname(__FILE__) . "/Actions/$action.action.php";
if (!is_readable($path)) {
die('Error');
}
?>
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');
}
?>
Inoltre considera che
non è proprio per niente sicuro :lol:codice:$path = dirname(__FILE__) . "/Actions/$action.action.php"; if (!is_readable($path)) { die('Error'); }
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
dirname($pathCheck) mi restituirà nel caso di spora /etc che è diverso da /path/alla/root/del/sito/web/Actionscodice:dirname($pathCheck) !== realpath('./Actions')
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 hocOriginariamente 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

Rispondi quotando