PHP ti permette di istanziare classi da variabili o voci di array, come questo:
class Foo {}
$className = 'Foo';
new $className();
$someArray = ['class_name' => 'Foo'];
new $someArray['class_name']();
Stranamente, alcuni dei miei colleghi - su più progetti a cui ho lavorato in più aziende - hanno usato questa caratteristica linguistica con i nomi di classe forniti dall'input dell'utente come un modo per creare un'istanza di una delle varie sottoclassi possibili a seconda di un tipo specificato in la richiesta. Ho visto il codice lungo queste linee ...
new $_GET['product_type']($_GET['product_id']);
Questo, oltre ad essere un mal di testa per la manutenzione, è ovviamente stupido e pericoloso; stai permettendo a un aggressore di istanziare una classe arbitraria. Ma come pericoloso? Quali attacchi ci sono che usano solo classi PHP integrate (e quindi non richiedono conoscenze dettagliate del codice dell'applicazione) che potrebbero essere usate contro endpoint come quello sopra?
Sto cercando l'attacco più brutto che chiunque possa inventare che posso usare per spaventare i futuri colleghi che usano questo orribile anti-modello.